c++ - 使用C++在OS X上动态链接SQLCipher

标签 c++ macos dynamic compiler-errors dynamic-linking

我本来想静态地编译SQLCipher,因为它看起来更容易链接,但我一直没有成功。我能找到的唯一在OS X上讨论编译SQLCipher的地方是this blog post,但是即使他不能使静态编译正常工作。

我能够获得SQLCipher的动态编译功能,并且能够使用博客中提到的sqlcipher命令行程序,但是现在我想在已编译的C++程序中使用sqlcipher。我从未在命令行中直接处理过动态编译,所以我有点迷路。

看起来它产生了一个libtool文件libsqlcipher.la,所以我想知道如何将其导入C++ #include "libsqlcipher.h"中?环顾libtool的教程时,他们大多提到如何编译它,但是我还没有找到有关如何链接它的任何简单示例。

我根据看到的内容尝试了类似的操作,但出现了两个错误:

libtool g++ -o test EncryptDatabases.cpp sqlcipher/libsqlcipher.la
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't open file: g++ (No such file or directory)
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: EncryptDatabases.cpp is not an object file (not allowed in a library)
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: sqlcipher/libsqlcipher.la is not an object file (not allowed in a library)

最佳答案

没有答案,是的,但是对于评论太久了。

据我记得,首先应该明确告知libtool将源文件编译为“库对象”:

libtool --mode=compile g++ -c EncryptDatabases.cpp -o EncryptDatabases.lo

那么它应该链接二进制文件:
libtool --mode=link g++ -o test EncryptDatabases.lo sqlcipher/libsqlcipher.la

docs

关于c++ - 使用C++在OS X上动态链接SQLCipher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209431/

相关文章:

macos - 如何在 Mac 上安装/使用 rabbitmq-plugins

macos - 使用 NSPasteboardItemDataProvider 避免阻塞 NSDraggingSession 中的主线程

ios - Swift:从动态 SegmentedControl 获取值

c++ - 如何删除带有指向其他对象的指针的动态对象数组 (C++)

c++ - getElementsByTagName() 不适用于 DOMDOCUMENT60 的特殊字符

c++ - wxWidgets:定期重绘 wxFrame 中的图像

macos - 让 Subversion 1.6 与 OS X El Capitan 配合使用

c++ - 更改 SysLink 控件的背景颜色 - MFC

c++ - friend 模板定义。何时何地包含 <T>?

javascript - 自适应 adSense 广告 - 动态重新加载