2012-02-09 88 views
0

我有一個靜態庫libsqlite3.a,我想鏈接到我的小程序。 我make文件如下圖所示:無法鏈接到SQLite3靜態庫

CPP = g++ 

sources = main.cpp 
objects = main.o 

included = -IC:/SQLite-lib/include 
linked = -LC:/SQLite-lib/ -lsqlite3 

main : $(objects) 
    $(CPP) $(linked) $(objects) -o main 

main.o : $(sources) 
    $(CPP) $(included) -c main.cpp 

我不斷收到這樣的錯誤信息:

g++ -LC:/SQLite-lib/libsqlite3.a main.o -o main 
main.o:main.cpp:(.text+0x42): undefined reference to `sqlite3_open' 
main.o:main.cpp:(.text+0x7d): undefined reference to `sqlite3_close' 
main.o:main.cpp:(.text+0xe7): undefined reference to `sqlite3_close' 
collect2: ld returned 1 exit status 
make: *** [main] Error 1 

我在做什麼錯?我使用Win XP SP3,GCC 4.6.2。

+0

makefile和輸出不匹配! – 2012-02-09 09:54:01

回答

3

您必須始終將庫放置在鏈接的文件之後。更改生成文件中的鏈接線爲:

main : $(objects) 
    $(CPP) $(objects) -o main $(linked) 

這應該有效。

+0

非常感謝你的工作。 – Amani 2012-02-09 09:57:19

0

您的鏈接參數不正確。 -L用於指定目錄(搜索路徑)可找到庫的位置。 -l用於指定要鏈接到的庫。

g++ -LC:/some/lib/path main.o -o main -lsqlite3 
+0

與此我得到的錯誤消息:無法找到-lsqlite3 – Amani 2012-02-09 09:45:18

+0

我不知道,您的Q中的錯誤消息不再匹配您的生成文件,請更新,並保留原始的生成文件和錯誤message_。另外,對於C++編譯器使用'$(CPP)'是一個好主意。使用'$(CXX)'。 CPP用於C預處理器,而不是C++。 (並且-lsqlite3需要在'main.o'之後。) – Mat 2012-02-09 09:59:24

+0

感謝您的補充。 – Amani 2012-02-09 10:40:09