如何在linux上为C++创建一个动态库?
问题描述:
我想为linux上的C++程序创建一个动态库。 在C++程序/系统中,我使用libconfig ++库,libpqxx库,一些boost和C++ 11。如何在linux上为C++创建一个动态库?
我的步骤: 1)
g++ -Wall -I/usr/local/include/ -std=c++0x -lconfig++ -Wall -lpqxx -lpq -fPIC -c ../SourceFiles/DBHandler.cpp ../SourceFiles/ParamServer.cpp ../SourceFiles/Functions.cpp
2)
g++ -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 *.o
3)
ln -sf libctest.so.1.0 libctest.so.1
4)
ln -sf libctest.so.1.0 libctest.so
5)编译
g++ -Wall -I/path/to/include-files -L/path/to/libraries program.cpp -I/usr/local/include/ -std=c++0x -lconfig++ -lpqxx -lpq -lctest -o prog
执行上述命令后:
/usr/bin/ld: cannot find -lctest
collect2: ld returned 1 exit status
我在做什么错?
下面是引用: enter link description here
答
在步骤5,你忘了-L.
寻找当前目录库。
默认情况下,搜索库时只使用[long]系统目录列表。
在执行程序之前,您还需要将.
添加到LD_LIBRARY_PATH
环境变量中,以便在运行时也搜索当前目录。运行ldconfig
可以避免这种情况,但如果您只是在测试您的库并且不想持续影响您的系统,我会坚持LD_LIBRARY_PATH
的方法。
另一种方法是将您的库“安装”到其中一个目录中,例如/usr/local/lib
(或您的等价物)。这样做后,您应该使用ldconfig
,以便为您设置动态库缓存和所有符号链接。这是规范的方法,但可能不适合在所述库的迭代开发期间。
人们还需要运行'ldconfig',所以这个答案本身不会做。 –
@DirkEddelbuettel:不,不一定。 –
不同意。请允许我引用我添加到我的答案中的链接:_一旦创建了共享库,就需要安装它。简单的方法是将库复制到其中一个标准目录(例如/ usr/lib)并运行ldconfig(8)。这不是可选的。 –