【问题标题】:Eclipse C++ project not resolving LD_LIBRARY_PATH include variablesEclipse C++ 项目不解析 LD_LIBRARY_PATH 包含变量
【发布时间】:2012-07-22 01:48:36
【问题描述】:

我有一个要导入的 C++ 项目,它正在使用 activemq 库。导入项目后,我将环境下的 LD_LIBRARY_PATH 变量设置为指向

/usr/local/include/activemq-cpp-3.4.2

这允许项目查看所有用于 activemq 的库,并且我可以看到它显示在项目资源管理器的包含文件夹中。当我去构建项目时,我收到大量错误,以引用 /usr/local/include/activemq-cpp-3.4.2 中的包含/对象。有趣的是,二进制文件仍在生成中,但由于找不到库文件,大约有 80 个错误。二进制是如何制作的?另外,我必须对 LD_LIBRARY_PATH 环境变量做些什么才能使项目正确包含这些文件?

我尝试过使用 eclipse 启动

./eclipse -clean

但这似乎没有帮助。欢迎任何想法,并提前感谢您!

编辑:

我在 Redhat 4.X 上使用带有 C++ 版本 4.1.2 的 Eclipse Juno

【问题讨论】:

  • 是复制粘贴错误还是您真的在开头缺少斜线(例如:/usr/local...)?
  • 抱歉,这是一个复制粘贴错误。我确实有斜线。编辑 - 修复了原始问题帖子。
  • 据我了解,这是链接器错误。你设置了-l 标志了吗?
  • 如何检查链接器标志?编辑 - 我找到了链接器设置。是的,我在 include 中有 /usr/local/include/activemq-cpp-3.4.2。
  • 项目属性 > C/C++ 构建 > 设置 > GCC C 链接器 > 库

标签: c++ eclipse build activemq library-path


【解决方案1】:

LD_LIBRARY_PATH 不用于定位包含目录。它用于通知系统搜索共享库的目录列表:已编译的支持库,而不是例如用于 Eclipse 的 SDK。

您应该使用项目的属性添加到搜索的地点包括:C++ General->Paths and Symbols->Includes

如果您确实需要链接到其他库,也可以使用属性 - 不是 LD_LIBRARY_PATH::C++ General->Paths and Symbols->Library Paths

【讨论】:

  • 我在您列出的包含和库路径区域中都有 /usr/local/include/activemq-cpp-3.4.2/
  • 那么还有其他问题,或者您设置的属性有问题。
【解决方案2】:

查找头文件不是 LD_LIBRARY_PATH 的目的。该环境变量是告诉操作系统从哪里开始寻找共享库—— *.so 文件。操作系统在准备执行你的程序时寻找那些。 编译器在你的源代码中遇到#include语句时使用包含路径来搜索头文件。

不要修改 LD_LIBRARY_PATH 以影响程序的编译。

Eclipse lets you set your include path in your project options.

【讨论】:

  • #include 不是预处理器指令吗?预处理器本身就是一个程序。它在源代码中搜索# 命令并更改代码(添加所需的代码定义)或执行“文本替换”,然后编译器逐步执行预处理的源代码并查找语法错误,如果 clean 创建一个目标文件。
  • 如果你愿意,你可以争论编译器和预处理器之间的区别,@Roberto,但重点仍然是搜索包含文件的位置与 LD_LIBRARY_PATH 无关。
  • 是的,我的目的不是争论任何观点、踩脚趾,甚至回答问题。更多以确保我所学的是正确的。谢谢@Rob Kennedy!
猜你喜欢
  • 2014-09-14
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多