我正在尝试使用cmake将jsoncpp (json)与一个c++项目链接起来。它在一台计算机上运行得非常好,但在另一台计算机上(配置基本相同),我在执行我的应用程序时会出错:
dyld:库未加载: buildscons/linux-gcc-4.2.1/src/lib_json/libjson_linux-gcc-4.2.1_libmt.dylib 引用自:可执行文件的路径 原因:找不到图像
知道是什么导致了这一切吗?我甚至不明白它为什么要看@ buildscons/linux-gcc-4.2.1/src/lib_json/libjson_linux-gcc-4.2.1_libmt.dylib,因为我将jsoncpp放在usr/lib/中,并将名称改为libjsoncpp和cmake,找到正确的路径/库。
我还在两台电脑上用完全相同的方式构建了jsoncpp。
发布于 2013-09-11 11:08:11
我也有同样的问题。如果您运行tool -L libjson_linux-gcc-4.2.1_libmt.dylib,您可以看到libjson...的一些奇怪的相对地址。我想如果您复制了这个目录结构,它会工作,但这是一个糟糕的解决方案。
相反,我使用了.a (libjson_linux-gcc-4.2.1_libmt.a),并将其与二进制文件链接起来。在XCode中,我简单地在Build Settings -> Linking -> Other Linker Flags下为自己的.a添加了绝对路径。对我来说,是/Users/martin/Downloads/jsoncpp-src-0.5.0/libs/linux-gcc-4.2.1/libjson_linux-gcc-4.2.1_libmt.a,仅此而已。
当然,我不知道你的用例,也许你真的需要动态链接它。
发布于 2017-05-18 15:02:50
编辑:我现在明白了,你指的是利布森,而不是利布松 (它们不同了!)
在你的titel中,你提到了jsoncpp,这就是这个答案的意义所在。但也许这对那些被情报搞糊涂的人也有帮助。
您可以‘合并’jsoncpp。
从jsoncpp源dir运行python amalgamate.py,它创建:
dist/jsoncpp.cpp
dist/json/json.h
dist/json/json-forwards.h现在,您必须编译 jsoncpp.cpp 一度,并只编译针对的链接,即生成的jsoncpp.o
g++ -o jsoncpp.o -c jsoncpp.cpp (仅一次)g++ -o executable jsoncpp.o main.cpp (每次)如果您有错误,您可能必须在包含#define JSON_IS_AMALGAMATION之前进行json/json.h,但是.
..。我试过了,它对我有用。(没有#define JSON_IS_AMALGAMATION,即)
使用的代码:
#include "json/json.h"
#include "json/json-forwards.h"
int main(int argc, char *argv[])
{
Json::Reader reader;
Json::Value value;
if (!reader.parse("{\"hello\":\"world\"}", value, false))
{
std::cerr << "ERROR: Couldn't parse Json: " << reader.getFormattedErrorMessages() << std::endl;
return -1;
}
std::cout << value.toStyledString() << std::endl;
return 0;
}https://stackoverflow.com/questions/17276853
复制相似问题