0

binutils ld バージョン 2.21 を使用して、Windows で小さな DLL (1 つの入力ファイルのみ) をリンクしようとしています。dllexportオブジェクト ファイルでマークされているすべてのシンボルに対して、次のエラーが発生します。

Cannot export <symbol name>: symbol not found

これについて何ができますか?問題のシンボルが存在し、静的ではないことを nm のアプリケーションで確認しましたが、まだエラーが発生しています。オブジェクトファイルの削除と再構築も試みました。役に立ちませんでした。問題はリンクラインに関係していると思われます。記録のために、ここにそれがあります:

clang++ -fPIC -Wl,--dll,--compat-implib,--nxcompat,--dynamicbase -shared \
-o pthread.dll pthread.o -lkernel32 -lmsvcrt

私は何を間違っていますか?

4

1 に答える 1

0

この動作は明らかに Clang のバグによるものです。私が開発した回避策は次のとおりです。

  1. __declspec(dllexport)ソース コードからすべての(ただし は除く__declspec(dllimport)) ステートメントを削除します。
  2. に依存するライブラリを再コンパイルしますpthread.dll。インポート ライブラリはもうありませんが__declspec(dllimport)、ソース コードのステートメントのおかげで、GNU ld はその場でインポート ライブラリを生成できるほどスマートです。
于 2013-04-28T21:40:14.400 に答える