如何在linux中使用我自己的动态库(Makefile)

时间:2009-08-21 07:29:12

标签: linux dynamic makefile

我有一个为linux设计的c ++项目(g ++ / raw Makefile),我曾经静态地链接了所有工作正常的东西。现在我想构建静态和动态链接的二进制文件。我的Makefile中使用以下命令来构建动态库(比如libtest):

$(CXX)-shared -Wl,-soname,libtest.so.1 -o libtest.so.1.0.0 $(LIBTEST_OBJS)

输出是libtest.so.1.0.0,其名称为libtest.so.1

我发现至少有一个符号链接libtest.so - >需要libtest.so.1.0.0来链接我实际使用上面生成的libtest.so.1.0.0库的客户端程序。

我的问题是,如果我想构建我的软件,管理上述符号链接的标准方法是什么?显然,我不希望在我的源目录中有这些额外的东西,但是需要构建我的客户端二进制文件,我是否应该将其创建为构建客户端的临时链接,然后在完成后将其删除?或者我应该创建一个目录来托管生成.so库及其链接,并将所有内容留在那里,直到我做“make install”将它们安装到其他指定的目录中?现在很酷,这样做的标准方法是什么。

或许我生成库的方式不正确?我应该生成libtest.so(作为实际的库,而不是链接)来链接我的可执行文件,然后在执行``make install''时重命名库并创建这些链接?

任何输入将不胜感激。 :)

2 个答案:

答案 0 :(得分:1)

当然不要生成libtest.so作为实际链接。通常,安装共享库开发文件会安装.h文件并创建符号链接libtest.so,作为您必须编写的某些安装脚本的一部分。

如果您没有安装开发文件,只是在二进制文件的构建过程中使用库,则只需从makefile创建symbolik链接。

这里没有那么多标准,有些人更喜欢将工件构建到单独的构建目录, 有些人不在乎它是否在源目录中构建。我会构建一个单独的目录,并保持源目录清除任何.o / .so /可执行文件。

您可能会找到有用的信息here

答案 1 :(得分:1)

我的建议是使用处理此类情况的libtool