2

問題があります。mysqlコネクタの静的リンクを使用してアプリケーションをコンパイルしたいと思います。

私のコマンドライン:

g ++ -o newserver stdafx.cpp ... -lboost_system -lboost_thread -lpthread -lmysqlcppconn -static /usr/lib/libmysqlcppconn-static.a -std = c ++ 0x

しかし、私にはエラーがあります:

/usr/bin/ld: cannot find -lmysqlcppconn
/tmp/ccxpOfdZ.o: In function `IsEqualsDns(unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
Server.cpp:(.text+0x356e): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
collect2: ld returned 1 exit status

どうすればこれを修正できますか?ありがとう!

4

2 に答える 2

3

ライブラリはどこにありますlibsqlcppconn.alibsqucppconn.so (静的または動的)?コンパイラはそれを探していますが、見つかりません。

おそらく、これはと同じライブラリ /usr/lib/mysqlcppconn-static.aです。その場合は、をドロップして -lmysqlcppconnください。または、-lmysqlcppconn-static(スペースなしで)使用して、を忘れてください/usr/lib/libmysqlconn-static.a。そのような名前では、対応するが存在しないはずです。つまり、 。が.soなくても、g++は静的にリンクし -staticます。同じディレクトリにaとaの-static両方がある場合にのみ必要です。libmysqlconn-static.solibmysqlconn-static.a

2番目のエラー(これは単なる警告ですが、リンクされたプログラムを他のマシンで実行しようとすると、またはマシンのアップグレード後でも問題が発生します)に関して:-staticコマンドラインのどこかで使用する場合(現在はそうです)、その後リンクされたすべてのファイルに適用されます。静的にリンクしたくないシステムライブラリを含みます。私の推測では、-staticは必要ありません(上記を参照)。そうである場合は、静的にリンクするライブラリの直前に配置し、-dynamic直後に配置します(システムライブラリを含む後続のライブラリが動的にリンクされるようにします)。

于 2013-01-15T15:49:12.320 に答える
1

あなたは試すことができg++ -static YOUR ARGUMENTSます。

Windowsプラットフォームを使用している場合、Boostに対してリンクすると、いくつかの驚きが生じる可能性があります。通常のBoostインストール(たとえば、後./b2 install)は、動的ライブラリと静的ライブラリの両方を作成し、それらを同じディレクトリに配置します。通常、2つのライブラリ形式は、拡張子(.soまたは.a)のみが異なります。

Windowsは自動リンクをサポートしています。これは、基本的に、ライブラリファイルの最初の数バイトに、動的リンク用か静的リンク用かを示すフラグが含まれていることを意味します。Linuxプラットフォームでは、これは当てはまらず、リンカはどのファイルをロードするか混乱します(ライブラリ名の拡張子を指定しないため)。したがって、どの形式のリンクが必要かをリンカーに指示する必要があります。

于 2013-01-15T15:09:34.807 に答える