0

SQLiteで奇妙なリンクエラーが発生しました。私は次のコードを持っています:

void TestSQLiteTemp()
{
  /* sqlite3_initialize(); */
  sqlite3_close( db );
}

私はコンパイルしてリンクすることができ、すべてがうまくいきます:

perdue@minervatest04> ldd bin/tests 
    libCAENVME.so => /usr/lib/libCAENVME.so (0x00002afaffc42000)
    ...
    libsqlite3.so.0 => /home/perdue/software/minervadaq/minervadaq/sqlite/lib/libsqlite3.so.0 (0x00002afafff8f000)
    ...

しかし、sqlite3_initialize行のコメントを外すと、ldは失敗します。

g++  -o tests TestSuite.o -L/home/perdue/software/minervadaq/minervadaq/lib -lhardware -lminerva_workers -L/usr/lib64 -ldl -L/work/software/CAENVMElib/lib/x86_64 -lCAENVME -L/usr/local/lib -llog4cpp -L/usr/lib64 -lpthread  -L/usr/lib64  -L/home/perdue/software/minervadaq/minervadaq/sqlite/lib/ -lsqlite3
TestSuite.o: In function TestSQLiteTemp():
/home/perdue/software/minervadaq/minervadaq/tests/TestSuite.cpp:199: undefined reference to `sqlite3_initialize'

一部の関数は問題ないかもしれないが、他の関数はリンクに失敗する理由を誰かが知っていますか?

4

1 に答える 1

1

私自身の質問に答えるために、問題は/ usr / lib64に古いバージョンのsqliteがあり、カスタムインストール領域の前にリンカーリストに表示されていたということでした。カスタムライブラリ領域をライブラリパスのリストの先頭に移動すると、すべてが機能します。

于 2013-03-23T12:04:43.413 に答える