我一直在尝试使用eclipse使用boost文件系统库来设置C ++项目。我按照these的说明在我的系统上安装了boost。方向几乎
这似乎很好,没有错误。然后我启动了eclipse并创建了一个名为test的新测试项目,其中包含一个名为test.cpp的文件。其中的代码是:
#include <stdio.h>
#include <boost/filesystem.hpp>
int main() {
boost::filesystem::path path("/Users/schoen"); // random pathname
bool result = boost::filesystem::is_directory(path);
printf("Path is a directory : %d\n", result);
return 0;
}
这只是一件简单的事情,以确保所有设置都正确。当然我在这一点上试图编译它失败了。做了一些谷歌搜索并找到this网站。它说通过转到项目属性并添加“boost_filesystem”将boost库添加到链接器。我试过这个,好吧它没用。
有人能指出我正确的方向还是给我一个如何在Eclipse项目中设置Boost的提示?
我是C ++和Eclipse的新手,我的大部分经验都是使用Netbeans的Java。所以我现在很迷茫。
更新
我只想根据给出的答案更新我尝试过的内容。
根据Alex的建议,我将boost_system和boost_filesystem添加到链接器列表中。我仍然得到相同的编译器错误。
根据rve的建议,我将增强库的路径添加到了库搜索路径。当这不起作用。我清除了链接器列表并仅使用库搜索路径进行了尝试。这也行不通。
然后我清除了库搜索路径。然后,我在链接器窗口上手动编辑命令为'g ++ -L / Users / jacobschoen / Library / boost_1_45_0 / stage / lib -lboost -lboost_filesystem'。这也行不通。
在所有这些中,我尝试将boost的路径设置为'/ Users / jacobschoen / Library / boost_1_45_0'和'/ Users / jacobschoen / Library / boost_1_45_0 / stage / lib'。两者都没有。
根据要求,上述代码的编译错误是:
**** Build of configuration Debug for project test ****
make all
Building file: ../src/test.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/test.d" -MT"src/test.d" -o"src/test.o" "../src/test.cpp"
../src/test.cpp:10:32: warning: boost/filesystem.hpp: No such file or directory
../src/test.cpp: In function 'int main()':
../src/test.cpp:13: error: 'boost' has not been declared
../src/test.cpp:13: error: expected `;' before 'path'
../src/test.cpp:14: error: 'boost' has not been declared
../src/test.cpp:14: error: 'path' was not declared in this scope
make: *** [src/test.o] Error 1
如果有任何人有任何进一步的建议我还在尝试。
第二次更新 根据rholmes的建议,我添加了一个包含库以及链接器列表和库搜索路径。所以现在编译错误是:
**** Build of configuration Debug for project test ****
make all
Building target: test
Invoking: MacOS X C++ Linker
g++ -L/Users/jacobschoen/Library/boost_1_45_0 -o "test" ./src/test.o -lboost_system -lboost_filesystem
ld: library not found for -lboost_system
collect2: ld returned 1 exit status
make: *** [test] Error 1
有什么想法吗?
答案 0 :(得分:15)
只是想明确实际工作的内容,因为它有点拼凑而成。
./bootstrap.sh
./bjam
(这需要一段时间,所以去吸烟喝一杯咖啡)boost_system
和boost_filesystem
。在底部,它应该是'图书馆搜索路径(-L)'。在这里,您希望将路径/ stage目录放在提取boost下载的位置。它应该类似于下面的内容: 现在应该编译所有东西而没有问题,如果你需要使用任何其他的boost库,那么只需要将它添加到boost_filesystem和boost_system所在的链接器部分。享受。
答案 1 :(得分:4)
目前还不确定你在Eclipse中的哪个位置,但在Eclipse的include路径下应该是主boost目录的路径(/ Users / jacobschoen / Library / boost_1_45_0?)。编译器行应该有类似下面的内容,我想:
调用:GCC C ++编译器
g ++ -I / Users / jacobschoen / Library / boost_1_45_0 -O0 -g3 -Wall -c -fmessage-length = 0 -MMD(etc ..)
更新:查看我的系统,您的链接器路径可能更合适:
-I /用户/ jacobschoen /库/ boost_1_45_0 /级/ lib中
当然,取决于你如何安装和构建boost - 这是我最近尝试完整的源代码构建。根据您获得的提升方式,这可能会有所不同,也可能不同。我最近在我的Mac上为64位重新加速了,并且没有太多时间尝试它....
答案 2 :(得分:2)
将boost_system与boost_filesystem一起添加到链接器列表中。
答案 3 :(得分:0)
我最近卸载了rpm rpm和installed Boost like how you did。我在Eclipse中运行Boost程序没有问题。我没有添加任何额外的参数。刚刚安装了boost并运行了Boost程序。它工作正常。
在vi编辑器中尝试了您的程序。在主
中注释掉所有内容#include <cstdio>
#include <boost/filesystem.hpp>
int main() {
/*boost::filesystem::path path("/Users/schoen"); // random pathname
bool result = boost::filesystem::is_directory(path);
printf("Path is a directory : %d\n", result);*/
return 0;
}
它仍然给出了这个错误:
/tmp/cc7TAIYS.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x29): undefined reference to `boost::system::get_system_category()'
test.cpp:(.text+0x35): undefined reference to `boost::system::get_generic_category()'
test.cpp:(.text+0x41): undefined reference to `boost::system::get_generic_category()'
test.cpp:(.text+0x4d): undefined reference to `boost::system::get_generic_category()'
test.cpp:(.text+0x59): undefined reference to `boost::system::get_system_category()'
collect2: ld returned 1 exit status
我很困惑。 Boost程序可以在我的系统上运行,但程序的头文件本身就会出现问题。我怀疑这是Eclipse的一个问题。它必须是别的东西。
答案 4 :(得分:0)
我刚刚使用eclipse和CDT遇到了类似的东西...事实证明,使用ubuntu和apt-get,libboost_system安装为/ usr / lib中的libboost_system.1.40.0
如果你试图通过Helios中的库选项卡添加它,它会抱怨,因为它正在寻找* .so和* .s0.1.40.0显然不匹配。但仔细观察链接器试图做什么之后,我只是将原始字符串“boost_system”输入到包含路径加法器中。这导致链接器执行“-lboost_system”,这是链接器知道如何处理解析版本依赖性的格式...如果您改为放入.so文件的完整路径,链接器只会抱怨因为它尝试做一个“-l / usr / lib / libboost_system.so.1.40.0”。
所以接受我的建议,然后在进行apt-get安装后输入简单的“boost_system”。这将使这一切变得非常简单。