在Eclipse(或Xcode)中链接Boost程序选项

时间:2012-04-26 00:19:38

标签: c++ xcode eclipse boost linker

我放弃了链接到Xcode中的Boost Program Options,因为我无法让它工作。我想出了如何识别标题,但我对如何设置要链接到Xcode的库的路径不够熟悉。

去年我在大学里使用过Boost和Eclipse,所以如果我在这个项目中使用Eclipse,我想我能够更容易地解决它。我的程序看起来很像他们提供的示例(first.cpp)。如果您觉得需要查看源代码,我会将其加载到github

别担心,我在/ usr / local / boost中安装了Boost:

new-host-2:$ ls | grep program_options
libboost_program_options.a
libboost_program_options.dylib
new-host-2:$ pwd
/usr/local/boost_1_49_0/stage/lib

我在Project>下以下列方式为Boost配置了我的项目设置;属性> C / C ++一般>路径&符号: 包括:/ usr / local / boost_1_49_0 / 库:boost_program_options 库路径:/ usr / local / boost_1_49_0 / stage / lib

基于Eclipse控制台,您会认为它正确链接,因为我最后得到了这个输出:

Building target: FizzBuzz
Invoking: Cross G++ Linker
g++ -L/usr/local/boost_1_49_0/stage/lib -o "FizzBuzz"  ./Fizzbuzz.o ./main.o -lboost_program_options
Finished building target: FizzBuzz


**** Build Finished ****

然而,当我去运行我的程序时,我得到一个对话框,上面写着:“无法启动”无法启动选择,并且最近没有启动。

我尝试从命令行运行它,没有运气:

new-host-2:$ ./FizzBuzz 
dyld: Library not loaded: libboost_program_options.dylib
  Referenced from: /Users/per001/Documents/workspace/FizzBuzz/Debug/./FizzBuzz
  Reason: image not found
Trace/BPT trap: 5

如何将其设置为在Eclipse中正确链接?甚至更好,Xcode?

4 个答案:

答案 0 :(得分:2)

我已设法从指定的github存储库链接并运行您的代码。

这有点过程,因为我的进展有所不同。

首先,我重新安装了我的mac boost,如下所示。

  1. 我已经从here安装了最新的macport。

  2. 然后我安装了最新的命令行工具,因为我有xcode 4.3,并且here默认不再提供命令行工具。

  3. 之后我按如下方式安装了boost:

    sudo port install boost

    这里我遇到了一些问题,因为Xcode与以前不同,所以我必须执行以下命令来解决这个问题:

    sudo xcode-select -switch /Applications/Xcode.app

    要验证这已完成作业,我已执行以下操作:

    xcode-select -print-path

    我有预期结果: /Applications/Xcode.app

    在此之后文件的位置如下:

    macpro:local ervinbosenbacher$ locate libboost_program_options.a
    /opt/local/lib/libboost_program_options.a
    
    macpro:local ervinbosenbacher$ locate program_options
    /opt/local/include/boost/program_options
    /opt/local/include/boost/program_options/cmdline.hpp
    /opt/local/include/boost/program_options/config.hpp
    /opt/local/include/boost/program_options/detail
    ...
    
  4. 在此之后,我启动了XCode并创建了一个全新的项目,并将您的代码文件包含在项目中。

  5. 修改了以下设置:

    Build Settings->All->Search Paths->Always Search User Paths: Yes.
    
    Build Settings->All->Search Paths->Library Search Paths->Debug->Any Architecture|Any SDK:/opt/local/lib
    Build Settings->All->Search Paths->Library Search Paths->Release->Any Architecture|Any SDK:/opt/local/lib
    
    Build Settings->All->Search Paths->User Header Search Paths->Debug->Any Architecture|Any SDK:/opt/local/include
    Build Settings->All->Search Paths->User Header Search Paths->Release->Any Architecture|Any SDK:/opt/local/include
    
    Build Settings->All->Linking->Other Linking Flags->Debug->Any Architecture|Any SDK: -lboost_program_options
    Build Settings->All->Linking->Other Linking Flags->Release->Any Architecture|Any SDK: -lboost_program_options
  6. 然后我已成功构建并运行Xcode中的应用程序:

    Allowed options:
            --help                produce help message
            --begnum arg          set beginning number
            --endnum arg          set ending number
            --fizznum arg         set fizznum (default: 3)
            --buzznum arg         set buzznum (default: 5)
            --fizzword arg        set fizzword (default "Fizz"
            --buzzword arg        set buzzword (default "Buzz"
    

答案 1 :(得分:0)

以下是我如何使用shell中的普通g ++链接Linux上的Boost程序选项:

g++ -static main.cpp -o program \
-I/usr/local/include/boost/ \
/usr/local/lib/libboost_program_options-s.a

在cpp源代码中,我有这个包括:

#include <boost/program_options.hpp>

我不确定如何在Xcode中添加Eclipse的路径,但你可以尝试从shell中获取普通的g ++,看看它是否正确编译和链接,然后从那里开始。

答案 2 :(得分:0)

使用install_name_tool调整dyn lib的路径:
$ otool -L /path/to/your/binary(将列出共享库dep)
$ install_name_tool -change libboost_foo.dylib /path/to/boost/stage/lib/libboost_foo.dylib /path/to/your/binary(将更改dyn lib的位置)
$ otool -L /path/to/your/binary
$ /path/to/your/binary

答案 3 :(得分:0)

你试过吗

export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/boost_1_49_0/stage/lib

在同一终端内启动Eclipse之前,看看它是否修复了这个错误?

贝努瓦。