1

単純なライブラリを作成しようとするのはこれが初めてです。g++ 4.6.3 を使用して Ubuntu 12.04 で作業しました。問題は次のとおりです。

[[mylib.cpp]]
#include<sqlite3.h>
void Mylib::blahblah() {...}
void Mylib::evenmoreblah() {...}
...

[[mylib.h]]
#include <...>
class Mylib {
    ...
};

次に、次の方法でライブラリを作成しました。

 gcc -c -Wall -fpic mylib.cpp
 gcc -shared -o libmylib.so mylib.o

main() のみを含む単一の test.cpp でライブラリを使用しました。libmylib.so を ./libdir に置き、以下を使用してコンパイルしました。

 g++ -g test.cpp -o test -lpthread -L/usr/local/lib -lsqlite3 -L./libdir -lmylib

私が得たエラー:

./libdir/libmylib.so: undefined reference to `sqlite3_close'
./libdir/libmylib.so: undefined reference to `sqlite3_exec'
./libdir/libmylib.so: undefined reference to `sqlite3_free'
./libdir/libmylib.so: undefined reference to `sqlite3_open'
4

3 に答える 3

0

あなたのライブラリは を使用してsqlite3いるため、リンカーコマンドで独自のライブラリの後にそれを追加する必要があります。共有ライブラリのリンクにも追加できると思いますが、確実ではありません。

リンカーは、ライブラリとその参照をリストした順序で解決するため、順序は重要です。

于 2013-04-18T13:59:57.193 に答える