【问题标题】:Including source files from another C++ project in Eclipse CDT在 Eclipse CDT 中包含来自另一个 C++ 项目的源文件
【发布时间】:2012-10-25 19:22:42
【问题描述】:

我在 Eclipse CDT 中有一个 C++ 项目,它使用 OpevCV 中的一些函数,它编译成可执行文件并且工作正常。现在我想要一个新的 C++ 项目,它使用第一个中定义的一些函数。我无法将两者编译并链接在一起。

我在新项目的相关文件中有#include "...",我已经将旧项目添加到新项目的引用项目中,并且在新项目的构建设置中,我已经添加了源文件夹旧项目作为包含(-I gcc 选项)。

我附上了我的 Eclipse 的屏幕截图,以防有用:

编译器给出的错误是:

构建目标:OtherProject
调用:GCC C++ 链接器
g++ -o "OtherProject" ./src/foo.o
./src/foo.o:在函数“main”中:
/home/max/opencvjni/OtherProject/Debug/../src/foo.cpp:13:未定义对阈值()的引用'
collect2: ld 返回 1 个退出状态
make: *** [OtherProject] 错误 1 ​​

这是屏幕截图其他选项卡中其他文件中的代码:

Threshold.cpp

#include <cv.h>
#include <highgui.h>
#include "Threshold.h"

using namespace cv;

int threshold(void) {
   Mat img = imread("/home/max/opencvjni/monalisa.jpg", 0);
   threshold(img, img, 127, 255, THRESH_BINARY);
   imwrite("/home/max/opencvjni/monathresh.jpg", img);
   return 0;
}

int main(void) {
  threshold();
  return 0;
}

Threshold.h

#ifndef THRESHOLD_H_
#define THRESHOLD_H_

int threshold(void);

#endif /* THRESHOLD_H_ */[/code]
  • Eclipse 版本:3.7.2
  • CDT 版本:8.0.2.201202111925
  • 操作系统:Ubuntu 12.04

感谢您查看我的帖子,如果没有办法这样做,或者换一种方式这样做更明智,请不要犹豫。

问候

【问题讨论】:

    标签: c++ eclipse eclipse-cdt


    【解决方案1】:

    我也在寻找答案,但以前的答案并没有解决问题。 (尼克的回答很有帮助)。 你必须定义两件事:

    1. 转到Project-&gt;Properties-&gt;C/C++ general-&gt;Paths and Symbols。选择Source Location选项卡并单击Link Folder...,然后选择您要包含的文件夹。
    2. 转到Project-&gt;Properties-&gt;C/C++ general-&gt;Paths and Symbols。选择Includes 选项卡。 确保在左侧菜单中选择正确的语言(例如:GNU C++)并单击Add...,然后选择要包含的文件夹。

    注意:我不确定是否有必要,但是当我创建外部项目时,我在新项目向导中选择了“共享库”选项。

    为确保一切正常,请访问:Project-&gt;Properties-&gt;C/C++ Build-&gt;Settings。选择GCC C++ Linker 并确保All options 包含“-L/your_folder_name”。 对GCC C++ Compiler 也重复此操作。

    【讨论】:

      【解决方案2】:

      转到项目->属性->C/C++ 通用->路径和符号。选择“源位置”选项卡,然后单击“链接文件夹...”按钮。您应该能够选择包含要引用的项目的目录。该项目的所有源文件都将包含在您当前的项目中。反正对我有用。

      【讨论】:

        【解决方案3】:

        作为一个新用户,我无法评论 Itay Gal 的答案,所以这是添加该答案的一种非常笨拙的方式。我的补充可能是显而易见的,但对我来说并不是那么明显。

        来自 Itay Gal 你必须定义两件事:

        来自推荐项目

        1.转到项目-> 属性-> C/C++ 通用-> 路径和符号。选择 Source Location 选项卡并单击 Link Folder...,然后选择要包含的文件夹。

        要“选择要包含的文件夹”,我使用链接文件夹->高级,点击“链接到文件系统中的文件夹”复选框并浏览到我的文件夹位置,该位置位于我的工作区位置。 “文件夹名称” 是我的引用项目的子目录,我的引用文件将出现在其中,并在我选择引用的文件夹时自动填写。您可以编辑文件夹名称,但不能为其指定路径以使其成为子目录。

        2。转到项目-> 属性-> C/C++ 通用-> 路径和符号。选择包含选项卡。确保在左侧菜单中选择正确的语言(例如:GNU C++)并单击添加...,然后选择要包含的文件夹。

        展开“选择要包含的文件夹”,从 “包含” 选项卡中,单击 添加->工作区,选择引用的项目并浏览到引用的文件夹并单击确定

        我没有将我的外部项目作为一个库,只是将一些文件保存在另一个 git 存储库中,这些文件甚至不是自己构建的。我希望它们分开,因为代码被其他几个项目共同使用。

        为确保一切正常,请转到:项目->属性->C/C++ 构建->设置。选择 GCC C++ 链接器并确保所有选项包含“-L/your_folder_name”。对 GCC C++ 编译器也重复此操作。

        我在“所有选项”中的Project->Properties->C/C++Build->Settings->Cross ARM C++ Compiler下找到了我的链接项目窗口,但不在 ->Cross ARM C++ Linker 选项卡 “所有选项” 窗口中。无论如何,我的代码似乎可以正确构建并正确启动调试窗口。

        非常感谢 Itay gal 的回答。

        所以它对我的第一个项目非常有效,如上所述。然后我尝试对另外两个需要使用引用代码的项目做同样的事情。花了很长时间后,我得出结论,“Sources”目录中的项目包含与整个项目中的不同。如果您选择项目并应用第 2 步,您会得到与选择“源”目录并应用第 2 步不同的结果。这可能是我在学习 eclipse 时无意中打开的,但如果是我找不到关掉它的地方。

        【讨论】:

          【解决方案4】:

          我个人喜欢 CMake 指定我的构建选项。 CMake 项目也可以导入 Eclipse CDT。 CMake 允许您在 linux 上生成 make 文件项目,也可以在 windows 上生成 VS 项目。 OpenCV 网站还提供了一个example,说明如何将其与 CMake 一起使用。

          【讨论】:

          • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
          • @rkhb 我提供了另一种设置可在 eclipse CDT 中使用的 C++ 项目的方法。新手用户往往不了解 CMake,并在开始使用 Eclipse 时尝试使用 Eclipse 项目。一开始很容易使用,但随着时间的推移更难维护
          • 这是一条自动评论,带有来自审阅任务的预定义文本。有人将您的答案标记为删除,我支持它。我的意见:如果您想对“XY 问题”回答“X”,请在评论中进行。
          猜你喜欢
          • 1970-01-01
          • 2014-10-06
          • 2013-04-17
          • 1970-01-01
          • 2014-09-18
          • 2014-03-17
          • 2010-09-21
          • 2019-03-24
          • 2017-11-24
          相关资源
          最近更新 更多