Я пытаюсь связать jsoncpp (lib_json) с проектом c ++ с использованием cmake. Он отлично работает на одном компьютере, но на другом (с почти одинаковыми настройками) я получаю сообщение об ошибке при запуске приложения:
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 одинаково на обоих компьютерах.
У меня такая же проблема. Если вы бежите 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
и это все.
Конечно, я не знаю ваш вариант использования, возможно, вам действительно нужно динамически связать его.
РЕДАКТИРОВАТЬ: Теперь я понимаю, ты имеешь в виду 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;
}