2013-02-02 86 views
1

雖然將程序從Windows移植到mac,我正在xcode中構建一個C/C++庫。 該庫使用sqlite3 c api。以前在windows中,sqlite3源代碼被編譯爲庫的一部分。sqlite3鏈接在mac osx上的錯誤

我必須編譯我的圖書館可與32個和64位平臺上兼容,需要支持的Mac OSX 10.5起,直到10.8

在Mac上似乎有SQLITE3內置的,所以我想我不需要編譯sqlite3的代碼項目和相當參考圖書館已經在平臺上

庫編譯但給出鏈接錯誤sqlite3的函數調用,

我能找到MAC sqlite3.dylib這是一個動態庫。

在windows中,我們使用loadlibrary()函數調用來使用dll。所以,讓我困惑的是,我是否必須更改我的代碼,以便可能爲mac調用類似於loadlibrary()的調用,然後使用它?我不確定..我是mac新手。

我期待在mac上有一個sqlite3的靜態庫,我找到的是dylib,如果我可以靜態鏈接sqlite3,它可能是最好的,因爲我不需要改變很多代碼。

如何鏈接到我的xcode項目平臺可用的sqlite3庫?或者我需要編譯sqlite3代碼作爲我的項目的一部分,並忽略平臺上的dylib?

任何幫助嗎?

+0

當你說「圖書館編譯但給出了sqlite3的功能鏈接錯誤叫」你的意思是最後的二進制文件*使用*庫提供鏈接器錯誤,因爲庫是靜態的(因此在構建庫時鏈接不參與)? – trojanfoe

+0

不,我的意思是當我建立庫時xcode讓我連接sqlite3調用的錯誤(沒有編譯時錯誤)我還沒有在其他二進制文件中使用這個庫,但是因爲我甚至無法編譯它。我正在構建的庫是dylib類型,在xcode 4.3中我選擇了框架和庫 - > C/C++ linrary來創建這個庫項目 – Ahmed

+0

OK,聽起來你只需要在'sqlite3'庫中鏈接,它可以被設置在項目構建設置中。 – trojanfoe

回答

0
#ifndef WIN32 
typedef void* HANDLE 
inline HANDLE LoadLibrary(char path[]) 
{ 
    return (HANDLE) dlopen(path, RTLD_NOW); 
} 
inline void FreeLibrary(HANDLE handle) 
{ 
    dlclose((void*) handle); 
} 
#endif 

//把上面的函數頭,那麼你可以繼續使用調用LoadLibrary語法