首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在代码块中针对动态库而不是静态库进行编译

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

Stack Overflow用户
提问于 2012-01-29 22:09:20
回答 1查看 648关注 0票数 0

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

/usr/lib/mysql/libmysqlclient.a

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

*myfile.c|87|undefined引用“`mysql_use_`mysql”**

  1. 是否意味着链接器在CentOS 6下使用动态.so文件,但是在CentOS 5下它使用的是静态.a文件?
  2. 是否有方法配置我的项目以便它也使用动态.so文件链接?
  3. 也必须在链接器库中添加"libresolv“和"libssl”,否则我会得到很多错误。(在CentOS 6下,我不这么做)。这是同一个问题吗?
EN

回答 1

Stack Overflow用户

发布于 2012-01-30 03:20:28

你这里有两个问题。

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

您应该反复检查libmysqlclient.so是否在LDPATH 中,并且是兼容的体系结构(请记住64位对32位问题)。

您还需要在-lresolv 6下添加-lssl和CentOS的原因是,MySQL库不再自动提取它们--在以前的版本中,它总是会这样做,但在CentOS 6中,正确地没有这样做。通常,您可以使用pkg-config来查看链接特定库所需的内容(或者查看它的.la文件(如果安装了)。您也可以使用libtool进行链接,但我不建议这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9057236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档