[問題] link時LNK2005出現錯誤 想問怎麼做才對

看板C_and_CPP (C/C++)作者 (Bad_To_The_Bone)時間12年前 (2013/11/07 15:04), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 2005 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) SQLite3 問題(Question): 我開一個VC solution ------------------------------------------------------ Project SQLite3 :編譯目標 Static Libary source code: 網路上抓的sqlite3.c sqlite3.h 編譯成功 輸出 SQLite3.lib ------------------------------------------------------- Project SQLite3Log:編譯目標 Static Library source code: 一點std::wstring <-> std::string 的轉換 .h檔內容 ------------------------------------------ #include sqlite3.h namespace SQLite3Log { sqlite3 *SQLite3db_; bool initSQLite3DB(bool use_original_db); void closeSQLite3DB(void); }; ------------------------------------------- 使用到 sqlite3型態 initSQLite3DB 使用 sqlite3_config (定義在sqlite3.h) 使用 sqlite3_open (定義在sqlite3.h) closeSQLite3DB 使用 sqlite3_close (定義在sqlite3.h) Solution裡面設定 Project SQLite3Log depend on Project SQLite3 然後這個project設定Link Library Dependence 編譯成功 輸出檔案 SQLite3Log.lib ------------------------------------------------------- Project SQLite3LogTest source code: 使用SQLite3Log::initSQLite3DB #include "SQLite3Log.h" Solution裡面設定 Project SQLite3LogTest depend on Project SQLite3Log 然後這個project設定Link Library Dependence 編譯失敗 錯誤 sqlite3log.lib(SQLite3Log.obj) : error LNK2005: "struct sqlite3 * SQLite3Log::SQLite3db_" (?SQLite3db_@SQLite3Log@@3PAUsqlite3@@A) already defined in SQLite3LogTest.obj 程式碼(Code):(請善用置底文網頁, 記得排版) code不多 不知道是否與VC設定有關 我把整個Solution壓縮 請看Release|Win32設定 https://dl.dropboxusercontent.com/u/57491997/test.zip 補充說明(Supplement): 不是很懂要怎麼看這種Libary重複定義的問題 看錯誤訊息 我在SQLite3Log.h宣告的 SQLite3db_ 被重複宣告 即使加入#ifndef xx #define xxx #endif 也還是錯誤 想請教一下該如何解決呢 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.59.147.226

11/07 15:51, , 1F
sqlite3 *SQLite3db_; 這寫在.h 只要兩個module include
11/07 15:51, 1F

11/07 15:52, , 2F
就re define了
11/07 15:52, 2F

11/07 16:40, , 3F
ㄟ 好像是... 喔 所以變數宣告在h有這問題 我再看一下
11/07 16:40, 3F

11/07 16:43, , 4F
加上extern後 再 cpp定義一下就可以了
11/07 16:43, 4F

11/07 16:59, , 5F
恩 可以編譯成功了 但是有好多LNK4006 警告
11/07 16:59, 5F
SQLite3.lib(sqlite3.obj) : warning LNK4006: _sqlite3_blob_open already defined in SQLite3Log.lib(sqlite3.obj); second definition ignored 這類型的東西有5千多行 orz 感謝大大 ※ 編輯: donkeychen 來自: 210.59.147.226 (11/07 17:00)
文章代碼(AID): #1IUpk22p (C_and_CPP)
文章代碼(AID): #1IUpk22p (C_and_CPP)