2017-09-15 14 views
3

私はcmake 3.6.2を含むCygwin 2.9.0-2を使用しています。私はcmake 2.8を使ってCentOS上で開発されたcmakeファイルを取得しようとしています。これは、さまざまなライブラリをインポートする大きなcmakeファイルであり、ユニットテストのすべてをコンパイルしてgtestを再度実行します。Cygwin gccにはどのようなライブラリタイプが必要ですか?

cygwin gccが入力をリンクするためのWindowsライブラリやLinuxライブラリを必要としているかどうか、またそれが何を生成するのかを完全に理解していません。 Cygwinは.a/.soや.lib/.dllファイルをライブラリにコンパイルするために期待しているのですか?同じものを作成するのでしょうか、まったく気にしません。結局のところ、それはWindows上で実行される実行可能ファイルをコンパイルしているので、私はそれが.lib/.dllを生成するだけでなく、それらを期待することを期待するでしょう。

私はgtestリポジトリをクローンして、/usr/local/lib/libgtest.aにビルドしてインストールしました。ベンダーの*.libライブラリにリンクしましたが、リンカーはgtestライブラリを見つけることができません。 gtestcakeを変更して.aの代わりに.libを生成する必要がありますか?

私はこのcmakeファイルを移植するのをやってみることができますが、私はどこから始めたらいいのか分からず、この理解の欠如が私を殺しています。私がこれを理解すれば、私は前進することについてより良い決定を下すことができると感じています。

Cygwin gccのmanページは、-lLibNameがリンクするファイルlibLibName.aを探すことを意味します。Linuxと同じです。すばらしいです。では、なぜVendorLib.libがリンクしていますか? (ライブラリを正しく検索して見つけるには、cmakeを入手してリンクエラーが消えてしまったので、すべての表示がリンクされている)

適切なドキュメントへのリンクがあれば、答えとして。それがあれば、私はドキュメントを見つけることができません。 TIA SOユーザー!

更新:

は、64ビットのLinuxのライブラリを使用するcmakeの設定、私はcmakeのから以下のメッセージ出力を得る:

-- Found Ballard library /usr/local/lib64/ballard/libbtiCard.so 
-- Found Ballard library /usr/local/lib64/ballard/libbti1553.so 

とmakeから次

/usr/local/lib64/ballard/libbtiCard.so: error adding symbols: File in wrong format 
collect2: error: ld returned 1 exit status 

Windows .lib静的ライブラリでコンパイルすると、このエラーメッセージが表示されません。 .soから.dll.aに名前を変更しても何も変更されませんでした。

Cygwin用に特別なビルドは必要ありませんか? Cygwinではなく、ベンダーのライブラリに問題がありますか?その問題に対処するにはどうすればいいですか?

最終更新

私は/usr/local/lib64/vendor/libVendor.aに私のベンダーのWIN64/VENDOR.LIBをコピーしました。

私はそれはlib64に/パスを検索しますので、私はまた私のcmakeのファイルに次の行を追加

を/usr/local/include/vendor/*.hために私のベンダーのLinux/API64/*。時間をコピー:

Googleテスト/モックライブラリを/ usr/local/libから/ usr/local/lib64に移動しました。私が変更しなければならないこの質問に無関係の他の事柄がありましたが、これらはすべて他のSOの質問でカバーされています。なんて素晴らしいコミュニティなの!インポートライブラリをcygwinの上

+0

フードの下で実行中の興味深いものがあるように見えます。彼らはmakefileとの互換性のために.a拡張子と.so拡張子を保持していたと思います。しかし、結局それはすべてのx86アセンブラとWindowのネイティブexe形式です。 – yacc

+0

したがって、拡張子が.aになるようにWindowsライブラリの名前を変更する必要がありますか? – PfunnyGuy

+0

名前の変更だけでは完了していないと思います。 .aと.dll.aの両方に '! 'プリアンブルと.dll.aはdllが埋め込まれているように見えません。 (例:libssp.dll.a) – yacc

答えて

3

は {LIB}名 - ヘッダとインポートライブラリを含む

パッケージの名前の共有バージョンのため
libNAME.dll.a静的バージョンの

libNAME.aと命名されています開発一例として、

$ cygcheck -cd |grep glpk 
glpk         4.63-1 
libglpk-devel       4.63-1 
libglpk40        4.63-1 

$ cygcheck -l libglpk-devel |grep usr/lib 
/usr/lib/libglpk.dll.a 

$ cygcheck -l libglpk40 
/usr/bin/cygglpk-40.dll 

のでlibglpk-develパッケージには、共有インポートライブラリlibglpk.dll.aが含まれています。 他のプログラムで使用されている対応する共有ライブラリはNAME.libです。NAME.libと呼ばれるインポートライブラリは、cygwinプログラムをビルドする際に混在させるべきではありません。

+0

私はこのような問題を発見しました。[Cygwinの下でcmakeを使ってライブラリをコンパイルする](https://stackoverflow.com/questions/3763212/compiling-libraries-with-cmake-under-cygwin?rq=1)。私が以前に持っていたものは正しいと思っていました。ファイル名が間違っていて、gtestコンパイルが私のリンクエラーの本当の原因です。 – PfunnyGuy

+0

私の問題は完全には解決されていませんが、この回答はかなり私の質問に答える。しかし、私はいくつかの実験を行い、Windowsライブラリが必要なものであることを認識し、リンカーの検索パスが不完全であるためgtestが見つからないことが分かりました。一度完成すれば、結果を質問編集として投稿します。ありがとう@matzeri! – PfunnyGuy

関連する問題