0

プロジェクトを正しくリンクするのに問題があります。プロジェクトはCMAKEで構築されています。リンクは問題ないようですが、実行時にエラーがスローされます。

リンクに使用されたコマンドは次のとおりです。

$ /usr/bin/clang -Wl,-search_paths_first -Wl,-headerpad_max_install_names  \
      CMakeFiles/project.dir/src/conf.c.o CMakeFiles/project.dir/src/tun-compat.c.o \
      CMakeFiles/project.dir/src/compress.c.o CMakeFiles/project.dir/src/mc.c.o \
      CMakeFiles/project.dir/src/hexdump.c.o CMakeFiles/project.dir/src/server.c.o \
      CMakeFiles/project.dir/sys/unix/log.c.o CMakeFiles/project.dir/sys/unix/imsg.c.o \
      CMakeFiles/project.dir/ sys/unix/imsg-buffer.c.o CMakeFiles/project.dir/sys/unix/toto.c.o \
      CMakeFiles/project.dir/sys/unix/toto.c.o CMakeFiles/project.dir/sys/unix/util.c.o \
      CMakeFiles/project.dir/sys/unix/conf.c.o CMakeFiles/project.dir/sys/unix/tntsocket.c.o \
      -o bin/project/opt/local/lib/libevent_openssl.dylib /opt/local/lib/libevent_core.dylib \
      /usr/lib/libz.dylib /opt/local/lib/libyajl.dylib /opt/local/lib/libtapcfg.dylib  

私が得るエラー:

$ ./bin/project                                                                                                                                                                                             
dyld: Library not loaded: build/libtapcfg.dylib                                                                                                                                                             
  Referenced from: /Users/Antoine/project/./bin/project                                                                                                                                                     
  Reason: image not found                                                                                                                                                                                   
zsh: trace trap  ./bin/project                                                                                                                                                                              

追加情報:

 $ dyldinfo -dylibs bin/projectattributes                                                                                                                                                            
         dependent dylibs                                                                                                                                                                                        
                        /opt/local/lib/libevent_openssl-2.0.5.dylib                                                                                                                                         
                        /opt/local/lib/libevent_core-2.0.5.dylib                                                                                                                                                                    
                        /usr/lib/libz.1.dylib                                                                                                                                                               
                        /opt/local/lib/libyajl.2.dylib                                                                                                                                                      
                        build/libtapcfg.dylib                                                                                                                                                               
                        /usr/lib/libSystem.B.dylib                                                                                                                                                          

それは私には黒魔術のように見えます。リンカはシンボルを見つけることができますが、リンクコマンドでの処理方法に違いが見られない場合でも、ライブラリのパスを変更することになります...

libの場所は/opt/local/lib/libtapcfg.dylibです

$ ls -lhF /opt/local/lib/libtapcfg.dylib                                                                                                                                                                    
-rwxr-xr-x  1 root  admin    20K 14 jui 18:05 /opt/local/lib/libtapcfg.dylib*                                                                                                                               

問題は、リンクしているライブラリに起因している可能性がありますか?

4

1 に答える 1

1

問題は、libtapcfgをどのように構築およびインストールしたかにあります。

ローカルディレクトリから/opt/ local / libにコピーしたようです。そのため、そのファイルシステムパスはライブラリに保存されているものと一致しません。

libをローカルパスに残すか、ビルド時にリンカーに最終的な場所を指示するか、リンカーにハードコーディングされている/ usr / local/libにコピーします。ダイナミックライブラリに関するAppleデベロッパのメモを参照してください

ポートを使用してmacportsを使用する場合は、/ opt/localにのみ配置する必要があります。この場合、多くのことを行う必要のないローカルポートファイルを作成すると、macportsの標準的な作業により、ライブラリに正しい情報が配置され、/ opt / local/libから機能するようになります。

于 2012-06-27T12:19:49.420 に答える