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

发布于 2024-08-02 16:40:37 字数 679 浏览 2 评论 0原文

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

任何意见将不胜感激。 :)

I have a c++ project (g++/raw Makefile) designed for linux, I used to statically link everything which worked fine for ages. Now I want to build binaries both statically and dynamically linked. The following command is used in my Makefile to build the dynamic library (say libtest):

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

The output is libtest.so.1.0.0 which has the so name libtest.so.1

I found at least a symbolic link libtest.so --> libtest.so.1.0.0 is required to link my client program that actually use the above generated libtest.so.1.0.0 library.

Here my question is if I want to build my software, what is the standard way of managing the above symbolic link? Clearly I don't want this extra stuff in my source directory, but it is required to build my client binary, shall I create it as a temp link for building the client then just remove it when done? or shall I create a directory to host the generate .so library and its links and leave everything there until I do "make install" to install them into other specified directories? Will be cool to now what is the standard way of doing this.

Or maybe the way how I generate libraries is incorrect? shall I just generate libtest.so (as actual library, not a link) to link my executable, then rename the library and create those links when doing ``make install''?

any input will be appreciated. :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁月打碎记忆 2024-08-09 16:40:37

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

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

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

您可能会在此处找到有用的信息

Certainly don't generate libtest.so as an actual link. Typically installing the shared library development files installs the .h files and creates a symbolic link libtest.so as part of some install script you have to write.

If you're not installing the development files, but only using the library in your build process of your binary, you just create the symbolik link from your makefile.

There's not that much of a standard here, some prefer to build artifacts to a separate build directory,
some don't care if it's built in the source directory. I'd build to a separate directory though, and keep the source directory clean of any .o/.so/executable files.

You might find useful information here

长发绾君心 2024-08-09 16:40:37

我的建议是使用 libtool 来处理这样的情况。

My suggestion is to use libtool which handles situations like this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文