4

CMake を使用して Windows で共有ライブラリをリンクしようとしています。この共有ライブラリは Clang でコンパイルされているため、GNU ld を使用してデバッグ シンボルが適切に伝達されるようにする必要があります (Microsoft の link.exe は GNU スタイルのデバッグ シンボルについて何も知らないため)。kernel32.dll私の共有ライブラリは、とのインポート ライブラリに依存していますmsvcrt.dll。w32api インストールの一部として、GNU スタイルのインポート ライブラリがあります。

ただし、呼び出しでインポート ライブラリ名を指定すると、名前がtarget_link_libraries()壊れてコマンド ラインに表示されます。ただし、kernel32 インポート ライブラリの名前はではなくであるため、リンクは失敗しています。これは、Clang のコピーがデフォルトで Microsoft link.exe を使用するようになっていて、この動作をオーバーライドするように設定しているためだと思われます。この場合、おそらく Clang を再コンパイルする必要があります (新しいコピーで同じ動作が発生しないことを願っています)。target_link_libraries(${my_target} kernel32)-lkernel32.liblibkernel32.alibkernel32.lib.aCMAKE_CXX_CREATE_SHARED_LIBRARY

編集: Clang に問題はありません。Clang をゼロから再構築しましたが、.libサフィックスがまだ自動的に追加されていることがわかりました。私はそれがCMakeのせいだと知っています。私は何を間違っていますか?

4

1 に答える 1

3

CMAKE_LINK_LIBRARY_SUFFIX変数を変更してみることができます:

unset(CMAKE_LINK_LIBRARY_SUFFIX)
target_link_libraries(${my_target} kernel32)
于 2013-04-28T17:17:54.843 に答える