如何在linux上为c ++创建动态库?

and*_*rew 0 c++ boost dynamic-linking dynamic-library c++11

我想在linux上为c ++程序创建一个动态库.在c ++程序/系统中,我使用libconfig ++库,libpqxx库,一些boost和c ++ 11.

我的步骤: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
Run Code Online (Sandbox Code Playgroud)

2)

g++ -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0   *.o
Run Code Online (Sandbox Code Playgroud)

3)

ln -sf libctest.so.1.0 libctest.so.1
Run Code Online (Sandbox Code Playgroud)

4)

ln -sf libctest.so.1.0 libctest.so
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

执行上面的命令后:

/usr/bin/ld: cannot find -lctest
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

以下是参考: 在此处输入链接描述

Lig*_*ica 7

在第5步中,您忘记-L.在当前目录中查找库.

默认情况下,搜索库时仅使用[long]系统目录列表.

您还需要在执行程序之前添加.LD_LIBRARY_PATH环境变量中,以便在运行时搜索当前目录.运行ldconfig将避免这种情况,但如果您只是测试您的库并且不想持续影响您的系统,我会坚持这种LD_LIBRARY_PATH方法.

另一种方法是将您的库"安装"到其中一个目录中,例如/usr/local/lib(或等效的).您应该ldconfig在执行此操作后使用,以便为您设置动态库缓存和所有符号链接.这是规范方法,但在所述库的迭代开发期间可能不适合.

  • @DirkEddelbuettel:在我的职业生涯中,我一直非常愉快地这样做,我坚持在我的回答中详细说明的建议,对于我在答案中详述的用例.没必要.至.说话.喜欢.这个.只是.因为.您.不同意. (3认同)