我正在尝试使用cmake将jsoncpp(lib_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。
答案 0 :(得分:0)
我遇到了同样的问题。如果您运行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
而且就是全部。
当然,我不知道你的用例,也许你真的需要动态链接它。
答案 1 :(得分:0)
编辑:我现在看到,你的意思是libjson,而不是libjsoncpp(它们是不同的!)
在你的标题中你谈到jsoncpp,这就是这个答案的用途。 但也许这对于那些被这个标题感到困惑的人来说也很有用。
你可以'合并'jsoncpp。
从jsoncpp源目录运行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;
}