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