在OS X Eclipse中将Boost库添加到C ++项目中

时间:2010-12-14 01:19:27

标签: c++ eclipse macos boost

我一直在尝试使用eclipse使用boost文件系统库来设置C ++项目。我按照these的说明在我的系统上安装了boost。方向几乎

  1. 下载
  2. extract
  3. 运行bootstrap.sh
  4. 运行./bjam architecture = combined
  5. 这似乎很好,没有错误。然后我启动了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
    

    有什么想法吗?

5 个答案:

答案 0 :(得分:15)

只是想明确实际工作的内容,因为它有点拼凑而成。

  1. 下载boost文件并将其解压缩到您想要放置的位置。
  2. 在您的终端中,导航至该目录并运行./bootstrap.sh
  3. 当完成后,运行./bjam(这需要一段时间,所以去吸烟喝一杯咖啡)
  4. 打开你的eclipse Project并转到Project&gt;属性&gt; C / C ++ Build&gt;设置
  5. 点击MacOS X C ++ Linker&gt;库。 你应该看到一个分割窗口,顶部是'Libraries(-l)'。在此部分中添加boost_systemboost_filesystem。在底部,它应该是'图书馆搜索路径(-L)'。在这里,您希望将路径/ stage目录放在提取boost下载的位置。它应该类似于下面的内容:alt text
  6. 点击GCC C ++编译器&gt;包括。这将是一个单独的窗格,其中显示“包含路径(-I)”,我认为这是一个我,因为他的字体很奇怪,也可能是一个小写的l。无论如何,在该部分中添加没有stage / lib部分的放置boost的路径。它应如下所示:alt text
  7. 现在应该编译所有东西而没有问题,如果你需要使用任何其他的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”。这将使这一切变得非常简单。