2017-08-24 11 views
1

私はLinux用に持っていたMakefileプロジェクト用のmacOSバイナリを作成したかったのです。macOsのelf32 static libから取得したmach-o static libのリンクエラーSierra

私はこの変換を行うためにobjconvを利用することができると思っていたので、元のLinuxプロジェクトのリンクはelf32 static libです。

私が呼び出すことによって、変換を実行します。

警告1053:公衆に変換共通定数: triple_des_software_global_tdes_standard警告1053:公衆に変換し、共通の定数

objconv -fmacho32 -nu lib_elf.a lib_macho.a 

とを次の出力が得られます。 triple_des_software_global_mode警告1053: 共通定数をpublicに変換:triple_des_software_global_key 警告1053:共通定数をパブリックに変換された定数:_SM警告1053: パブリックに変換された定数:sbox警告1053:一般 パブリックに変換された定数:_SM警告1053:一般定数 がパブリックに変換されました:bit_size警告1053:一般定数がpublic:_local_ucl_a_sm2vp256に変換されます。共通の定数公衆に変換 :_local_ucl_inv2_sm2vp256警告1053:パブリックに変換され、一定の共通 :_local_ucl_p_sm2vp256警告1053:公衆に変換 共通定数:signature_computation警告 1053:公衆に変換し、共通の定数:_ucl_n_stored警告1053:公衆に変換 共通の定数:_ucl_rsqr_stored警告1053: 共通定数をpublicに変換:_ucl_r_stored W 1053 arning:sm2fp192警告1053: 共通の定数は、公衆に変換共通 公衆に変換定数:shadec_ctx警告1053:公衆に変換する共通の定数 :M0警告1053 shasign_ctx警告1053:公衆に変換定数 共通 一定の共通a10ctx警告1053:共通定数を に変換public:W32警告1053:一般定数をpublicに変換:H32 警告1053:一般定数をpublicに変換:a32警告1053: 共通定数をpublicに変換:b32警告1053 :共通定数 がpublicに変換されました:c32警告1053:共通定数が に変換されましたpublic:d32警告1053:共通定数がpublicに変換されました:e警告1053:共通定数をpublicに変換:f32警告1053: 共通定数をpublicに変換:g32警告1053:共通定数 をpublic:h32警告1053:共通定数を に変換public:workbuffer警告1053:共通定数を変換public: _stack警告1053:public定数をpublicに変換しました:_stack_index警告1053:public定数をpublicに変換しました:hash_size警告 1053:共通定数をpublicに変換:use_sha_hardwareInput ライブラリ:lib_elf.a、形式:ELF、出力:lib_macho .a、フォーマット:Mach-O リトルエンディアン

392デバッグセクションの削除147例外セクションrem 1922年の変更 シンボル名の先頭にアンダースコアを付けました

これまでどおりになっていると思いますか?

私はlib_machoとリンクしようとします。

make 
gcc-4.0 -O3 -g0 -v -W -Wall -DWORD32 -m32 -I../include -I../include/ucl -L. -o ../bin/darwin/ca_sign_build test.o -m32 -v -l_macho 
couldn't understand kern.osversion `16.7.0' 
Using built-in specs. 
Target: i686-apple-darwin10 
Configured with: /var/tmp/gcc_40/gcc_40-5494~315/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-arch=apple --with-tune=generic --host=i686-apple-darwin10 --target=i686-apple-darwin10 
Thread model: posix 
gcc version 4.0.1 (Apple Inc. build 5494) 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/gcc/i686-apple-darwin10/4.0.1/collect2 

10.4 -weak_reference_mismatches -macosx_version_min -dynamic -arch i386の非弱-o ../bin/darwin/ca_sign_build -lcrt1.o -L:私は出力を以下ます。 -L /アプリケーション/ Xcode.app /コンテンツ/開発者/ツールチェーン/ XcodeDefault.xctoolchain/usr/bin /../ lib/gcc/i686-apple-darwin10/4.0.1 -L/Applications/Xcode.app/Contents/Developer/ToolChains/XcodeDefault.xctoolchain /usr/bin/../lib/gcc -L/Applications/i686-apple-darwin10/4.0.1 /../../ .. test.o -l_macho -lgcc -lSystem ld:in ./lib_macho.a(ucl_sys.co)、セクション__TEXT、__ text reloc 2:R_ABSのRELOCなく i386アーキテクチャ collect2は用のターゲットアドレスでない絶対シンボル:*** [ca_sign_build]エラー1

:LDは1つの終了ステータス メイクを返さ

私は上の任意の有用なテキストグーグルことができませんでした:

LD:)./lib_macho.a(ucl_sys.coで、セクションの__TEXTで、__テキスト再配置2:R_ABSの再配置が、ターゲットでの絶対的なシンボルを私はそのリンカエラーについて何かを伝えることができ、誰があるかどうアーキテクチャはi386

のアドレスは、私は思ったんだけど?

最新のgccを使ってみましたが、xcode .gmgからxcodelegacy.shを使って取得したclang/llvmベースのgcc-4.2とgcc-4.0でしたが、いつも同じエラーが表示されます。

使用しているgccのバージョンに問題がありますか、objconvに提供する必要がある追加の指示がありますので、この問題を回避できますか?

ありがとうございます!

答えて

2

オブジェクトまたはライブラリファイルをあるOSから別のOSに変換することは、非常に単純な場合にのみ可能です。元のソースファイルがあるので、Mac OSで再コンパイルする必要があります。

関連する問題