gpt4 book ai didi

realm - 如何为 OS X 命令行实用程序构建静态 Realm 库?

转载 作者:行者123 更新时间:2023-12-02 11:35:39 25 4
gpt4 key购买 nike

我有一个基于 Foundation 的命令行实用程序,我想向其中添加 Realm 支持。不过,我无法使用 Realm.framework,因为我没有可以将其添加到的 bundle (而且我更喜欢避免涉及 install_name_tool 的安装黑客)。看来我应该能够构建一个静态库(代替框架)并将我的 CLI 实用程序链接到该库。

我尝试在 Realm Xcode 项目中添加静态库目标。该目标与 OS X 框架目标几乎完全相同(相同的源文件,相同的链接设置,但类型是静态库而不是动态库)。我将静态库链接到核心 librealm.a 库,它构建得很好。但是,无论我如何构建这个东西,当我尝试将 CLI 实用程序链接到静态库时,我都会遇到链接错误,例如:

Undefined symbols for architecture x86_64:
"std::runtime_error::what() const", referenced from:
vtable for realm::util::File::PermissionDenied in librealm_static.a(RLMRealm.o)
vtable for realm::util::File::AccessError in librealm_static.a(RLMRealm.o)
vtable for realm::RealmFileException in librealm_static.a(shared_realm.o)
vtable for realm::MismatchedConfigException in librealm_static.a(shared_realm.o)
vtable for realm::UnitializedRealmException in librealm_static.a(shared_realm.o)
vtable for realm::IncorrectThreadException in librealm_static.a(shared_realm.o)
vtable for realm::InvalidTransactionException in librealm_static.a(shared_realm.o)
...
"std::__1::error_code::message() const", referenced from:
realm::SharedGroup::do_open_2(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, realm::SharedGroup::DurabilityLevel, bool, char const*) in librealm_static.a(group_shared.o)
realm::util::mmap(int, unsigned long, realm::util::File::AccessMode, unsigned long, char const*) in librealm_static.a(file_mapper.o)
(anonymous namespace)::mmap_anon(unsigned long) in librealm_static.a(file_mapper.o)
realm::util::munmap(void*, unsigned long) in librealm_static.a(file_mapper.o)
realm::util::mremap(int, unsigned long, void*, unsigned long, realm::util::File::AccessMode, unsigned long) in librealm_static.a(file_mapper.o)
realm::util::msync(void*, unsigned long) in librealm_static.a(file_mapper.o)
realm::util::make_dir(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in librealm_static.a(file.o)
...

[编辑以在链接 librealm.a(相对于 librealm-dbg.a)时显示 undefined symbol ]

我还尝试使用 libtool 生成核心 librealm.a 库和从开源组件生成的静态库的组合静态库,例如:

cd "$TARGET_BUILD_DIR"
mv librealm_static.a librealm_dev.a
libtool -static -s -arch_only x86_64 -o librealm_static.a librealm_dev.a "$PROJECT_DIR"/core/librealm.a

再次,当我链接到新的“librealm_static.a”存档时出现链接错误 - 缺少符号。

还有其他人成功地将 Realm 集成到 OS X 命令行实用程序中吗?

最佳答案

您列出的特定符号都是调试函数,仅存在于 librealm-dbg.a 中。从预处理器定义中删除 REALM_DEBUG 或链接到该库而不是 librealm.a。

关于realm - 如何为 OS X 命令行实用程序构建静态 Realm 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com