在Eclipse CDT中包含来自另一个C ++项目的源文件

时间:2012-11-05 21:43:51

标签: c++ eclipse eclipse-cdt

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

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

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

enter image description here

编译器给出的错误是:

  

建筑目标:其他项目
  调用:GCC C ++链接器
  g ++ -o“OtherProject”./ src / foo.o
  ./src/foo.o:在函数`main'中:
  /home/max/opencvjni/OtherProject/Debug/../src/foo.cpp:13:undefined reference to threshold()'
  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
  • OS:Ubuntu 12.04

感谢您查看我的帖子,如果没有办法做到这一点,或者以其他方式做事更为明智,请不要犹豫。

此致

4 个答案:

答案 0 :(得分:15)

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

  1. 转到Project->Properties->C/C++ general->Paths and Symbols。选择Source Location标签,然后点击Link Folder...,然后选择您要包含的文件夹。
  2. 转到Project->Properties->C/C++ general->Paths and Symbols。选择Includes标签。 确保在左侧菜单中选择了正确的语言(例如:GNU C++)并单击Add...,然后选择要包含的文件夹。
  3. 注意:我不确定是否有必要,但在创建外部项目时,我在新项目向导中选择了“共享库”选项。

    要确保一切正常,请转到:Project->Properties->C/C++ Build->Settings。选择GCC C++ Linker并确保All options包含“-L / your_folder_name”。 对GCC C++ Compiler重复此操作。

答案 1 :(得分:7)

转到Project-&gt; Properties-&gt; C / C ++ general-&gt; Paths and Symbols。选择“源位置”选项卡,然后单击“链接文件夹...”按钮。您应该能够选择包含要引用的项目的目录。该项目的所有源文件都将包含在当前项目中。无论如何都适合我。

答案 2 :(得分:0)

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

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

来自推荐项目

1。转到项目->属性-> C / C ++常规->路径和符号。选择“源位置”选项卡,然后单击“链接文件夹...”,然后选择要包括的文件夹。

要“选择要包含的文件夹”,我使用了 Link Folder-> Advanced ,点击了“链接到文件系统中的文件夹” 复选框,然后浏览到我的文件夹的位置,该位置在我的工作区位置。 “文件夹名称” 是我的参照项目的子目录,其中,我的参照文件将出现在该目录中,并且当我选择参照文件夹时,该目录会自动填写。您可以编辑文件夹名称,但是不能给它提供路径以使其成为子目录。

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

展开“选择要包含的文件夹”,从“包含” 选项卡中,单击 Add-> Workspace ,选择引用的项目并浏览到引用的文件夹,然后单击“确定”

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

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

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

非常感谢Itay gal的回答。

因此,如上所述,它对我的​​第一个项目非常有效。然后,我尝试对其他两个需要使用引用代码的项目做同样的事情。花了很长时间后,我得出结论,“ Sources”目录中的项目与整个项目中的项目有所不同。如果选择该项目并应用步骤2,则得到的结果与选择“ Source”目录并应用步骤2的结果不同。这可能是我无意间在学习日食时不经意间打开的,但是如果是无处可关闭。

答案 3 :(得分:-1)

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