• ベストアンサー

Linuxの動的ライブラリをMacで使いたい

64bit Linux用に提供されたライブラリ(*.a, *.so)をMac(Snow Leopard)で使いたいと思っています。Mac環境でコンパイルをしたところ、リンク時に以下のwarningが出てしまいました。 ld: warning: in xxx.so, file is not of required architecture Webで調査し、gccのオプションに-arch i386 -arch x86_64を付けてみましたが解決できませんでした。そもそも、Linux用のライブラリをMacで使うというのは無理なのでしょうか?ご回答どうぞよろしく御願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

動的ライブラリの仕組みはOSによって異なるので、他OSのバイナリの流用は普通は無理。 Mac OS Xでは.soではなく.dylibという形式を使います。

関連するQ&A

  • mac(leopard)でgslが使えません

    初めまして、私は最近macを使うことになった者です。 mac(lepard)に数値計算ライブラリgslを入れて計算をしようとしたのですが、コンパイル時に以下のエラーが出てしまいます。 ld: warning in /usr/local/lib/libgsl.dylib, file is not of required architecture ld: warning in /usr/local/lib/libgslcblas.dylib, file is not of required architecture このエラーはgccでコンパイルした時には出ず、問題なく実行することができます。 まだmacに慣れておらず、一通り調べてみたのですが解決できませんでした。 環境は コンパイラ:intel C++ Compiler ver.10.1 PC : leopard 10.5.1 gsl:ver. 1.10 です。 どなたかわかる方がいらっしゃいましたら、お力をお貸しいただきたいです。 よろしくお願いいたします。

  • Linux C言語共有ライブラリを作成するときの

    RedHatLinux7.3(2.96-110)、gcc(2.96 20000731)です。 C言語で共有ライブラリを作成しています。このライブラリは呼び出し側のプログラム起動時にロードされるものなのですが、以下の2つの手順で生成されたライブラリは、どのような違いがあるのでしょうか? どちらも呼び出し側からは関数コールで実行できるのですが、どちらが正しいのでしょうか? 【その1】 1) gcc -shared -o libxxx.so xxx.c (ライブラリ生成) 2) gcc ./libxxx.so -o testcall testcall.c (呼び出し側とライブラリをリンクして実行ファイル生成) 【その2】 1) gcc -fPIC -c libxxx.c(ライブラリのオブジェクト生成) 2) gcc -fPIC -c -shared -Wl,-soname,libxxx.so.0 -o libxxx.so.0.0 xxx.o(共有ライブラリ生成) 3) soname設定 4) linkername設定 5) gcc -c -o testcall.o testcall.c(呼び出し側オブジェクト生成) 6) gcc -o testcall testcall.o -lxxx 7) LD_LIBRARY_PATH設定、exportする 以上、ご存知のかた、どうぞよろしくお願いします。

  • コンパイルで、BerkeleyDBのライブラリがありません

    gccで、Pro*Cソースのコンパイルを行っています。 BerkeleyDBを使用しているのですが、BerkeleyDBのバージョンを3.3に指定するとコンパイル出来ます。 バージョン4.1でもコンパイル出来ました。 しかし、バージョン4.6.21を指定すると、 ld: 重大なエラー: ライブラリ -ldb: 見つかりません。 と出力され、コンパイル出来ません。 BerkeleyDBのlibディレクトリ下は、 libdb-4.6.so libdb-4.6.la libdb.so -> libdb-4.6.so libdb-4.so -> libdb-4.6.so です。 どなたか教えて頂けないでしょうか。。 申し訳ありませんが宜しくお願い致します。。

  • C言語で作ったらWindowsでもMacでもLinuxでも動くんですか?

    Linuxでgccを使ってC言語を勉強してます。 Linuxのgccでコンパイルして作ったプログラムはWindowsでもMacでも動くんでしょうか? 逆にWindowsで作ったのはとか、Macで作ったのは他のOSで動くんだろうかと疑問で・・・。 教えてください!!

  • バージョンの違うライブラリを適宜使い分けたい

    linux上にて、バージョンの異なるライブラリをインストールしております。このライブラリを用いて、コンパイル・実行をする際に、バージョンの違うライブラリを適宜使い分けたいのですが、どのようにすると効率的でしょうか? makeを使ってコンパイルしていますが、コンパイルの際に静的リンクを行うのが良いでしょうか?それとも、動的リンクにしておき、実行時にLD_LIBRARY_PATHを設定しなおして動かすのが良いでしょうか?あるいは、上記以外に方法があればアドバイスをもらえればと思います。

  • スタティックライブラリの使い方

    Linuxで使えるCのライブラリを落としてきたのですが、使ったことがないので戸惑っています。 パッケージは、makefile , .c , .h の3つで、makeするのはできました。で、ライブラリ.a が出力されまして、このファイルを使え!と説明書にはあるのですが、この先がよくわかりません。 とりあえず、出力されたライブラリを/usr/lib あたりに入れて、自作のプログラムで先ほどのライブラリのヘッダをインクロードするところまではできたのですが・・・。 コンパイルすると、/usr/bin/ld: cannot find -ライブラリ と出てしまいます。教えていただけますでしょうか。

  • gccの「-l」オプションとライブラリの関係

    gcc の -l オプションってどのような動作なのでしょうか?? sendmail関係の少々実験的な開発をするために、 OSに標準で入っているsendmail関係のライブラリである、   /usr/lib/libmilter.a   /usr/lib/libmilter.so   /usr/lib/libmilter.so.3 を削除して、 sendmailをソースからコンパイルして、 sendmailのソースの中のlibmilterもコンパイルしました。 この時点で、libmilter.a は、コンパイルしたディレクトリ(/usr/local/src/sendmail-8.14.2/)の下の   /usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/ の中にしか存在しないのですが・・・ gcc -pthread -lc_r \   -L/usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/ \   -lmilter \   test.c としてコンパイルしようとすると、libmilter の中にある関数が、 ことごとく「undefined reference」になってしまいます。 これを、-L や -lオプションでライブラリを探させるのをやめて、明示的に gcc -pthread -lc_r \   test.c \   /usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/libmilter.a と書くと、問題なくコンパイル&リンクできるのですが・・・ なぜなのでしょうか??

  • コンパイルエラー

    こんにちは。質問させてください。 Ubuntu9.04 64-bitであるプログラムをコンパイルしたところ、次のようなエラーが出ました。 gcc -lm -lz findpat.o bwt.o common.o libp2zip.o lcp.o mrs.o bittree.o tiempos.o enc.o -o findpat /usr/bin/ld: i386 architecture of input file `findpat.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file `libp2zip.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file `bittree.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file `tiempos.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file `enc.o' is incompatible with i386:x86-64 output collect2: ld returned 1 exit status make: *** [findpat] エラー 1 このエラーを直すにはどうすればよいでしょうか?

  • GCCでライブラリが足りない

    はじめまして。 LindowsOS4.0を使っています。 コンパイルができずに困っています。 GCCとMAKEをインストールしました(Lindowsはどちらも入っていないのです。Debian/Woodyベースと言われています)。 gcc 2.95.4 make 3.79.1 which gcc とすると、/usr/bin/gcc と表示されます。 で、./configure すると、 ..... checking whether the C compiler works ... no と表示されコンパイルエラーになります。 configure.log を見ると、 ------------------- checking for gcc configure:916: checking whether the C compiler (gcc ) works configure:932: gcc -o conftest conftest.c 1>&5 /usr/bin/ld: cannot open crt1.o: No such file or directory collect2: ld returned 1 exit status configure: failed program was: #line 927 "configure" #include "confdefs.h" main(){return(0);} --------------------- とか --------------------- checking for gcc configure:905: checking whether the C compiler (gcc ) works configure:921: gcc -o conftest conftest.c 1>&5 /usr/bin/ld: cannot open crt1.o: No such file or directory collect2: ld returned 1 exit status configure: failed program was: #line 916 "configure" #include "confdefs.h" main(){return(0);} ---------------------- とかなっています。 confdefs.hというのは何かのライブラリなのでしょうか?これが無いとconfigureできないのでしょうか?? よろしくお願いいたします。

  • 共有ライブラリロードエラー(_Znwj)

    LINUXのGCCで,共有ライブラリを作成しようとしています。 ライブラリとして提供する関数の中で,エリアを new しているものがあるのですが,こうして作成したライブラリ(mytest.so.1.0)をアプリケーションから dlopen() で開こうとすると,  Error of dlopen() : ./mytest.so.1.0: undefined symbol: _Znwj となってしまいます。 この _Znwj というのがよくわからないのですが,nmコマンドでmytest.so.1.0 の情報を表示してみると,     :  00001e18 A _DYNAMIC  00001dcc A _GLOBAL_OFFSET_TABLE_   U _Znwj  00001dc0 ? __CTOR_END__  00001dbc ? __CTOR_LIST__     : となっており,確かに“未定義”として _Znwj というのが表示されます。 共有ライブラリの中で new を使用する場合は,なにか注意点などあるのでしょうか。 たとえば,コンパイルオプションでなにかを指定するとか・・ C/C++系の質問コーナーに発言するほうが良いのかもしれませんが,LINUX特有のことなので,こちらに質問しました。 ご存知の方,教えてください。

専門家に質問してみよう