【问题标题】:how to use my own dynamic library in linux (Makefile)如何在 linux 中使用我自己的动态库(Makefile)
【发布时间】:2009-08-21 07:29:12
【问题描述】:

我有一个专为 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”时创建这些链接?

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

【问题讨论】:

    标签: linux dynamic makefile


    【解决方案1】:

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

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

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

    您可能会发现有用的信息here

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • +1 当您最终决定将它从 Linux 移植到其他东西时,使用 libtool 会变得更容易 - libtool 可以处理共享库的所有平台相关问题。
      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多