如何在代码块中编译动态库而不是静态库

时间:2012-01-29 22:09:20

标签: mysql dynamic static codeblocks

我正在使用代码块来编译使用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下我没有)。这是同样的问题吗?

1 个答案:

答案 0 :(得分:0)

这里有两个问题。

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

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

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