1

在将程序从 windows 移植到 mac 时,我正在 xcode 中构建一个 C/C++ 库。该库使用 sqlite3 c api。以前在 Windows 中,sqlite3 源代码被编译为库的一部分。

我必须编译我的库以兼容 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?

请问有什么帮助吗?

4

1 回答 1

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

// 把上面的函数放在一个header中,就可以继续使用LoadLibrary语法了

于 2013-02-02T21:50:18.493 回答