1

我放弃了在 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

我在项目 > 属性 > C/C++ 常规 > 路径和符号下通过以下方式为 Boost 配置了我的项目设置:包括:/usr/local/boost_1_49_0/ 库:boost_program_options 库路径:/usr/local/boost_1_49_0/stage/库

基于 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

4 回答 4

3

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

这是一个过程,因为我的做法有点不同。

首先,我在我的 mac boost 上重新安装了如下。

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

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

  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

然后我已经成功地从 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"
于 2012-05-05T16:00:31.367 回答
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++ 来查看它是否正确编译和链接,然后从那里开始。

于 2012-04-26T00:35:50.400 回答
0

你试过了吗

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

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

贝努瓦。

于 2012-05-08T13:08:21.270 回答
0

使用以下命令调整 dyn 库的路径install_name_tool:(
$ 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 库的位置)
$ otool -L /path/to/your/binary
$ /path/to/your/binary

于 2012-05-07T23:38:54.900 回答