【问题标题】:eclipse-cdt how to link with static libraryeclipse-cdt如何与静态库链接
【发布时间】:2012-07-23 02:50:58
【问题描述】:

我很困惑应该在链接器/库下设置库还是将它们设置在“路径和符号”下。我认为它们是一样的。我说的对吗?

我的问题的任何方式 - 我需要链接静态库,所以我尝试了一些事情:

第一次尝试我尝试在链接库中添加gtest(这是库)和gtest路径。 这样它的编译和链接正确,但在运行时失败,因为当它试图加载共享库时(我想要静态库!)错误是

加载共享库时出错:libgtest.so.0

第二次尝试 - 我尝试在路径和符号中定义它,将完整路径 '/root/workspace/gmock/gtest/lib/.lib/libgtest.a' 添加到库中。在这种情况下,我在链接中遇到错误:

g++ -L/root/workspace/gmock/lib/.libs -L/root/workspace/gmock/gtest/lib/.libs -o "playground"  ./src/p.o ./src/playground.o   -lpthread -l/root/workspace/gmock/gtest/lib/.lib/libgtest.a -l/root/workspace/gmock/lib/.lib/libgmock.a
/usr/bin/ld: cannot find -l/root/workspace/gmock/gtest/lib/.lib/libgtest.a

This postdosnt 给出了答案,并没有解释您如何定义不同的链接与静态链接和共享链接。

谢谢

【问题讨论】:

  • 你试过 -L/root/workspace/gmock/gtest/lib/.lib/ -lgtest.a 吗?
  • 是的,试试看。仍然得到 -"/usr/bin/ld: 找不到 -lgtest.a"。据我所知文件名是 libgtest.a 你应该写 gtest

标签: c++ eclipse-cdt


【解决方案1】:

我将 Botan 密码库构建为一个静态库,出于我不想进入这里的原因,当我按照互联网上的所有步骤进行操作时,添加库路径并指定库名称而不使用“lib”和“.a”,我的项目构建得很好,但是,当我运行它时,我不断收到“程序意外终止”(或类似)错误。最后我想出了如何解决它。在菜单栏中,转到 Project > Properties > C/C++ Build > Settings > Cross G++ Linker 并在 ${COMMAND}${FLAGS} 之间添加 -static,因此整行如下所示:

${COMMAND} -static ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

您的可能会有所不同。我正在使用 Eclipse Luna Service Release 2 (4.4.2),在 Windows 8.1 上使用 mingw-w64 mingw-builds 项目 w/gcc 4.9.2。

【讨论】:

    【解决方案2】:

    将库路径/文件添加到:Properties - C/C++ Build - Settings - GCC C++ Linker - Miscellaneous - Other objects

    【讨论】:

      【解决方案3】:

      经过大量研究并且没有相关答案。找到了!!! 我在this useful link for eclipse-cdt找到它

      显然该库需要存在于工作区中。

      【讨论】:

      • 尽管将项目添加到“库搜索路径”,并将不带前缀“lib”和后缀“.a”的库名称添加到“GCC C++ 链接器”中的“库”中,但我发现有必要以及将引用的项目添加到包含路径(GCC C++ 编译器 --> 包含 --> 包含路径)
      • 似乎这仍然适用于 eclipse luna,但我如何链接 .so 文件?同样的方式?
      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      相关资源
      最近更新 更多