Eclipse CDT MinGW工具链:如何链接不以lib前缀开头的库?

时间:2017-01-13 13:43:25

标签: c mingw eclipse-cdt

我在Eclipse CDT MinGW项目中链接到名为xyz.a的库时遇到问题。 Eclipse项目找不到此库,除非我将其重命名为libxyz.a

我已添加:

  • 通过Properties/C C++ General/Paths and Symbols/Library Paths项目的图书馆路径。
  • 通过Properties/C C++ General/Paths and Symbols/Libraries投影的图书馆名称。我在这里指定的图书馆名称是xyz,所以它没有extesion。我应该在此处指定什么才能成功包含xyz.a而无需将其重命名为libxyz.a

我在网上找到的一些信息:

How do I specify the libraries to be searched by the linker?

    MinGW supports libraries named according to the "<name>.lib" and "<name>.dll" conventions, in addition to the normal "lib<name>.a" convention common on *nix systems. To include libraries named according to any of these conventions, simply add an associated "-l<name>" specification to the compiler command, ensuring it is placed after the name of the module in which the reference appears.
    Note that, if the library is not found in any of the default library search paths, you may also need to insert an appropriate "-L<dir>" switch to specify its location; (it is recommended that you place the "-L<dir>" switch before the "-l<name>" specification which requires it).
    Also note that the library names "lib<name>.a" and "lib<name>.lib" are not equivalent; if you have a library named according to the aberrant "lib<name>.lib" convention, it will not be found by an "-l<name>" specification -- if you cannot rename the library, you must use the form "-llib<name>" instead.

2 个答案:

答案 0 :(得分:3)

你可以链接一个名为oddname的库 - 其中oddname包含任何文件扩展名 - 在Eclipse CDT中如下:

  • 在项目属性 - >&gt;中导航 C / C ++ Build - &gt; 设置 - &GT; 工具设置 - &gt; GCC C ++链接器 - &gt;的

  • 图书馆(-l)面板中添加:oddname

  • 如有必要,在图书馆搜索路径(-L)面板中添加路径 oddname

  • 好的

此设置会将选项-l:oddname添加到生成的GCC链接中 命令。 -l:filename是表示-l选项的形式 传统的lib前缀和{.so|.a}扩展名暗示 filename是要链接的库的实际文件名。 Here is the documentation

答案 1 :(得分:1)

最简单的选择是将库添加到GCC的命令行。要使用CDT执行此操作,请将库(无论名称是什么)添加到其他对象(在项目设置下 - &gt; C / C ++ Build - &gt; GCC C链接器 - &gt; 其他

这是一个截图,我在其中添加了一个文件名为badname.a的库到GCC的命令行。

enter image description here

构建运行时,这是结果命令行:

Invoking: GCC C Linker
gcc  -o "SO"  ./src/SO.o  /home/me/workspace/SO/badname.a 

注意:上述解决方案的缺点是包含了整个库,而不仅仅是其中引用的对象。您也可以通过将链接器标记框添加到同一对话框中来添加所需的任何链接器标记。