如何在代码块中针对动态库(而不是静态库)进行编译

发布于 2024-12-31 21:22:22 字数 525 浏览 1 评论 0原文

我正在使用代码块来编译一个使用 mysql 的应用程序。在 CentOS 6 下,这个应用程序编译得很好(我假设使用了 .so 文件)。在 CentOS 5 下,除非我转到“项目|构建选项|链接器|链接库”并添加:

/usr/lib/mysql/libmysqlclient.a

否则我会收到链接错误,例如

*myfile.c|87|undefined reference to `mysql_use_result'|*

  1. 这是否意味着在 CentOS 6 下链接器正在使用动态 .so 文件,但在 CentOS 5 下它使用静态 .a 文件?

  2. 有没有办法配置我的项目,以便它也使用动态 .so 文件链接?

  3. 我还必须将“libresolv”和“libssl”添加到链接器库中,否则会出现很多错误。 (在 CentOS 6 下我不这样做)。这是同样的问题吗?

I'm using codeblocks to compile an app which uses mysql. Under CentOS 6 this app compiles fine (and I assumed used the .so file). Under CentOS 5 this same project file won't compile unless I go the to Project|Build Options|Linker|Link Libraries and add:

/usr/lib/mysql/libmysqlclient.a

Otherwise I get linking errors like

*myfile.c|87|undefined reference to `mysql_use_result'|*

  1. Does that mean under CentOS 6 the linker is using the dynamic .so file, but under CentOS 5 it's using the static .a file?

  2. Is there a way to configure my project so that it links using the dynamic .so file too?

  3. I also have to add "libresolv" and "libssl" to the linker libraries or I got lots of errors. (And under CentOS 6 I don't). Is this the same problem?

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

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

发布评论

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

评论(1

溺ぐ爱和你が 2025-01-07 21:22:22

你这里有两个问题。

首先,链接mysql的正确方法是在链接行添加-lmysqlclient,而不是尝试直接链接静态库。当您将 -lx 添加到链接行时,链接器将在 LDPATH 中搜索名为 libx.so 的文件(如果是动态链接)或libx.a(如果是静态链接)。

您应该仔细检查 libmysqlclient.so 是否在 LDPATH并且是兼容的架构(请记住 64 位与 32 位问题)。

在 CentOS 6 下您还需要添加 -lresolv-lssl 的原因是 MySQL 库不再自动将它们拉入 - 在以前的版本中,它总是会,但在 CentOS 6 中却没有。一般来说,您可以使用pkg-config来查看链接某个库所需的内容(或者查看其.la文件,如果它安装了)。您还可以使用 libtool 进行链接,但我不建议这样做。

You have two issues here.

The first is that the correct way to link against mysql is to add -lmysqlclient to the link line, instead of attempting to link the static library directly. When you add -lx to the link line, the linker will search LDPATH for a file named libx.so (if a dynamic link) or libx.a (if a static link).

You should double-check that libmysqlclient.so is in the LDPATH and is a compatible architecture (keep in mind 64-bit vs 32-bit issues).

The reason you need to add -lresolv and -lssl as well under CentOS 6 is that the MySQL library no longer automatically pulls them in - in previous versions, it always would, but in CentOS 6 it properly does not. Generally you can use pkg-config to see what you need to link a certain library (or look at its .la file, if it installed one). You could also use libtool to do the linking, but I don't recommend that.

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