2012-04-26 40 views
1

我放弃了链接,以提高在Xcode程序选项,因为我无法得到它的工作。我想出了如何让头文件被识别,但是我对如何设置要在Xcode中链接的库的路径还不够熟悉。链接加速程序选项

我在大学中使用升压和Eclipse去年,所以我想我可以把它变得更轻松理清,如果我只是使用了Eclipse为这个项目。我的程序看起来很像他们提供的示例(first.cpp)。如果您觉得需要查看来源,我已在github上加载。

别担心,我已经安装在/ usr /本地/升压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++常规>路径&符号: 包括:在/ usr /本地/ boost_1_49_0/ 库:boost_program_options 库路径:在/ usr /本地/ boost_1_49_0 /台/ 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?

+0

你有什么特别的原因将Boost.ProgramOptions编译为一个动态库吗?如果没有,那么你可以按照我的[静态编译指南](http://stackoverflow.com/questions/4755712/how-to-build-boost-1-45-universal-binaries/4894399#4894399),并可能拯救你自己很多麻烦。 – Mankarse 2012-05-08 08:12:29

回答

0

下面是我在Linux上使用普通的G ++从外壳链接升压方案选择:

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 ++来查看是否正确编译和链接,然后从那里开始。

+0

我试过了,但出现错误: 'new-host-2:基于类的解决方案per001 $ g ++ -static -o main -I/usr/local/boost_1_49_0// usr/local/boost_1_49_0/stage/lib/libboost_program_options.a ld:库找不到-lcrt0.o collect2:ld返回1退出状态 – paulrehkugler 2012-04-26 01:20:38

2

我已成功地从指定的GitHub库链接并运行代码。

这是一个过程的一点,因为我已经着手有点不同。

首先,我已经在我的Mac升压重新安装如下。

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

  2. 然后,我已经安装了最新的命令行工具,因为我有xcode 4.3,并且命令行工具不再作为默认从here发货。

  3. 后,我已经安装了升压如下:

    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" 
+0

哇 - 感谢所有的辛勤工作!明天让我试试看! – paulrehkugler 2012-05-07 03:52:12

+0

Np :)让我知道你怎么样。 – ervinbosenbacher 2012-05-07 11:40:08

+0

嗯...看起来我有问题'dyld:Library not loaded:libboost_program_options。dylib 从参考:/用户/ per001 /库/开发商/ Xcode中/ DerivedData/FizzBu​​zz-dqvwpktqcdxeeqaupfttomlnjkiq /编译/产品/调试/ FizzBu​​zz 原因:没有找到图片 (LLDB)' – paulrehkugler 2012-05-08 01:57:43

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在同一终端内空空的Eclipse之前(将改变DYN LIB的位置)
$ otool -L /path/to/your/binary
$ /path/to/your/binary

+0

我提供这个答案的原因是,你可以运行它;您的链接器找不到共享库,因此您可以使用'install_name_tool'来解决这个问题。特别是这个:'new-host-2:$ ./FizzBu​​zz dyld:Library not loaded:libboost_program_options.dylib 引用自:/Users/per001/Documents/workspace/FizzBu​​zz/Debug/./FizzBu​​zz 原因:找不到图片痕迹/ BPT陷阱:5' – 2012-05-08 05:01:34

0

你尝试

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

,看看它是否修复bug ?

Benoit。