如何在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,以便为您设置动态库缓存和所有符号链接。这是规范的方法,但可能不适合在所述库的迭代开发期间。

+0

人们还需要运行'ldconfig',所以这个答案本身不会做。 –

+0

@DirkEddelbuettel:不,不一定。 –

+0

不同意。请允许我引用我添加到我的答案中的链接:_一旦创建了共享库,就需要安装它。简单的方法是将库复制到其中一个标准目录(例如/ usr/lib)并运行ldconfig(8)。这不是可选的。 –

您需要ldconfig更新动态库缓存 - 它也会为您创建符号链接。

例如见Section 3.5 of this Linux Documentation Project HOWTO