Связывание jsoncpp (libjson)

Я пытаюсь связать 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 одинаково на обоих компьютерах.

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 и это все.

Конечно, я не знаю ваш вариант использования, возможно, вам действительно нужно динамически связать его.

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:

  1. g++ -o jsoncpp.o -c jsoncpp.cpp (только однажды)
  2. 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;
}
0

По вопросам рекламы [email protected]