【问题标题】:How to compile against dynamic lib, not static, in codeblocks如何在代码块中针对动态库而不是静态库进行编译
【发布时间】:2012-01-29 22:09:20
【问题描述】:

我正在使用代码块来编译一个使用 mysql 的应用程序。在 CentOS 6 下,这个应用程序编译得很好(我假设使用了 .so 文件)。在 CentOS 5 下,这个相同的项目文件不会编译,除非我转到 Project|Build Options|Linker|Link Libraries 并添加:

/usr/lib/mysql/libmysqlclient.a

否则我会收到类似的链接错误

*myfile.c|87|未定义对`mysql_use_result'的引用|*

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

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

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

【问题讨论】:

    标签: mysql dynamic static codeblocks


    【解决方案1】:

    这里有两个问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多