我正在使用代码块来编译使用mysql的应用程序。在CentOS 6下,这个应用程序编译得很好(我假设使用了.so文件)。在CentOS 5下,除非我转到Project | Build Options | Linker | Link Libraries并添加:
,否则这个相同的项目文件将无法编译的 /usr/lib/mysql/libmysqlclient.a 的
否则我会收到像
这样的链接错误* myfile.c | 87 |对mysql_use_result'的未定义引用| *
这是否意味着在CentOS 6下链接器正在使用动态.so文件,但在CentOS 5下它使用静态.a文件?
有没有办法配置我的项目,以便它使用动态.so文件进行链接?
我还必须将“libresolv”和“libssl”添加到链接器库中,否则我会遇到很多错误。 (而在CentOS 6下我没有)。这是同样的问题吗?
答案 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
进行链接,但我不建议这样做。