如何在eclipse中指定链接时使用的库版本?

Posted

技术标签:

【中文标题】如何在eclipse中指定链接时使用的库版本?【英文标题】:How to specify the library version to use at link time in eclipse? 【发布时间】:2014-08-04 17:59:27 【问题描述】:

我在 Linux 上的 Eclipse Juno(Service Release 2)中有一个 C++ 项目。

我需要引用第三方库,但其名称中包含库的版本:

libThirdParty.so.10.1

我尝试关注this post。但似乎我有一个旧版本的ld,它不起作用。 (我检查了手册页)

我尝试使用库的全名(路径/名称),但我不知道在哪里添加它,因为它不起作用。

没有版本,我无法创建库的符号链接。

在 Eclipse 中,我应该在哪里引用完整的库名称?还有其他方法可以引用该库吗?

【问题讨论】:

也许如果您告诉我们为什么您不能使用符号链接,我们可以找到另一种帮助方式。 【参考方案1】:

在项目资源管理器中选择您的项目,然后按 Ctrl + Enter。这将弹出属性窗口。

然后,在Tool Settings Tab 中的C/C++ -> Settings 下选择Linker -> Libraries 单击按钮添加并写入您要链接到的库名称-版本。

警告:请注意,在 Linux 系统中存在一个名为 soname 的东西用于共享库,请阅读此answer 以获取有关它的详细说明。

编辑:致cmets

问题是链接器将寻找一个名为 lib<name>.so 的文件,因为您的库的名称是 libThirdParty.so.10.1 并且不以 .so 结尾不匹配此模式。 这不是你可以用 eclipse 解决的问题,这是一般的 linux 行为。如果您的库名称是 libThirdParty.10.1.so(注意尾随的 .so),那么您可以使用 ThirdParty.10.1 作为库 eclipse 字段中的库名称。

Linux 使用这个命名约定是为了更容易处理安装在系统中的同一个库的不同版本。 如果不使用符号链接或将库重命名为 libThirdParty.10.1.so,则无法完成您想做的事情。

【讨论】:

我不习惯 Linux,我通常在 Windows 上工作。根据您的警告,我收集到我需要安装共享库?我想我可以像在 Windows 中那样从源代码管理中获取一个 dll 并且可以引用它。在我链接的帖子中 gcc 支持接收文件的全名,问题是我不知道在 Eclipse 中的哪里做。当我在您指向的字段中添加 libThirdParty.so.10.1 时,它无法构建。 如果未安装该库,您还必须添加该库的搜索目录。因此,您必须将 lib 所在的目录添加到字段 Library search path,在我指出的字段下方。 我添加了路径,它在同一个文件夹中找到另一个库,但另一个文件没有版本号。 根据我后面指出的警告,你可以放一个符号链接到你想要的库。符号链接必须命名为libThirdParty.so,这就是soname。此符号链接位于您拥有库的同一文件夹中。另一个文件被“识别”,因为它的名称与它的 soname 匹配。 在我的问题中,我表示我不能使用别名。我的意思是符号链接,我更新了问题,所以它更清楚。感谢您的帮助。【参考方案2】:

我的同事帮我解决了这个问题:

    右键单击项目 => 属性 => C/C++ 构建 => 设置 在 GCC C++ Linker => Miscellaneous:写下你的库的全名,包括库路径。类似于 this post 上关于使用 GCC 构建的指示。

【讨论】:

以上是关于如何在eclipse中指定链接时使用的库版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试 Gradle 为啥使用我在依赖子项目中指定的不同版本的库?

在 Eclipse 中指定了未知版本的 Tomcat

如何在构建脚本中指定链接器标志/参数?

Microsoft vcredist在运行时使用的版本比清单中指定的版本高

如何在 CMake 中指定链接类型?

如何在链接或表单中指定 DELETE 方法?