これは基本的にmingw ld cannot find some library which is exist in the search path、MinGW linker can't find MPICH2 librariesと同じ問題ですが、私はthere are heaps of posts on StackOverflow regarding the issue of static and dynamic linking with MinGWを認識していますが、トラブルシューティングの方法については何も見つかりませんでした。バックスラッシュを含むレスポンス@fileから引数を読み込むと、MSYSのfind(既存の静的)ライブラリからldを呼び出すことができないのはなぜですか?
私は、MSYS2シェル(git-bash.exe
)のMinGW上で(g++
を介して)巨大なリンカコマンドを使ってプロジェクトを構築しています。プロセスは、とりわけ、で失敗します。
/z/path/to/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lssl
私はg++
リンカコール(ld
に渡される)に-Wl,--verbose
を追加し、私は-L/z/path/to/libs/openssl/lib/mingw -lssl
ために見ることができます:
...
attempt to open /z/path/to/libs/openssl/lib/mingw/libssl.a failed
...
/z/path/to/libs/openssl/lib/mingw/ssl.dll failed
attempt to open /z/path/to/libs/openssl/lib/mingw\libssl.a failed
...
しかし、これは奇妙ですファイルが存在するためですか?
$ file /z/path/to/libs/openssl/lib/mingw/libssl.a
/z/path/to/libs/openssl/lib/mingw/libssl.a: current ar archive
(...同じマシン上に同じコンパイラでビルドされていますか?)変なふう
、一度バックスラッシュ...\libssl.a
と、スラッシュ.../libssl.a
で開こうとしたら、 - しかし、上記のように少なくとも第1の経路は、bash
シェルでチェックアウト?
-l:libssl.a
を指定しようとするとさらに悪化します。代わりに-L/z/path/to/libs/openssl/lib/mingw -Wl,-Bstatic -lssl
を指定した場合はさらに悪化します。その後、オープンするすべての試みは、バックスラッシュである:
...
attempt to open /z/path/to/scripts/other/build/openssl/build/mingw/lib\libssl.a failed
attempt to open /z/path/to/libs/openssl/lib/mingw\libssl.a failed
...
それをすべてオフトップに、私はld
を使用して、コマンドラインから手動でそれを見れば、それが発見された:?!
$ ld -L/z/path/to/libs/openssl/lib/mingw -lssl --verbose
attempt to open Z:/path/to/libs/openssl/lib/mingw/libssl.dll.a failed
attempt to open Z:/path/to/libs/openssl/lib/mingw/ssl.dll.a failed
attempt to open Z:/path/to/libs/openssl/lib/mingw/libssl.a succeeded
んなぜこのようなことが起きるのか誰もが知っていますし、どうすれば最終的にこれらのライブラリを見つけるためにld
を得ることができますか?あるいは、どうすればトラブルシューティングができ、ld
が開こうとしているパスにこれらのライブラリが見つからないのか理解できますか?
OK、これはバグかどうかわかりません。私の問題は、実際にファイルから引数を読み取っていることです(それ以外の場合はg++: Argument list too long
となります)。だから、それをシミュレートする: - 引数が@
でを通じてファイルから読み込まれている場合が、非常に同じ引数は、コマンドラインで与え、その後、静的ライブラリの検索が成功している場合
$ echo " -Wl,--verbose -L/z/path/to/libs/openssl/lib/mingw -lssl -lcrypto " > tmcd3
$ g++ @tcmd3 2>&1 | grep succeeded | grep ssl
# nothing
$ g++ `cat tcmd3` 2>&1 | grep succeeded | grep ssl
attempt to open Z:/path/to/libs/openssl/lib/mingw/libssl.a succeeded
attempt to open Z:/path/to/libs/openssl/lib/mingw/libcrypto.a succeeded
を...それは、判明します-sign、静的ライブラリの参照に失敗しましたか?残念ながら、cat
であっても、まだ私はg++: Argument list too long
を取得しているので、実際のプロジェクトでは使用できません...どうすればこの問題を解決できますか?