Проблема со связыванием с libexpat в Boost Build - для построения graphml - PullRequest
1 голос
/ 05 апреля 2009

В моей системе экспат находится по адресу

/usr/include/expat.h
/usr/include/expat_external.h
/usr/lib/libexpat.1.5.0.dylib
/usr/lib/libexpat.1.dylib
/usr/lib/libexpat.dylib
/usr/lib/libexpat.la

Поэтому я экспортирую необходимые переменные для надстройки для сборки graphml

export EXPAT_INCLUDE=/usr/include
export EXPAT_LIBPATH=/usr/lib

затем я запускаю (где $ DIR и $ BOOST генерируют пути, по которым я хочу включить include и libs)

./configure --includedir=$DIR/$BOOST --libdir=$DIR/$BOOST/lib \ 
            --with-libraries=test,graph

Я получаю эту ошибку:

ld: library not found for -lexpat collect2: ld returned 1 exit status

, который говорит, что повышение вызвано линией:

g++ -dynamiclib -install_name "libboost_graph-mt-1_35.dylib" -L"/usr/lib" 
    -o "bin.v2/libs/graph/build/darwin/release/macosx-version-10.4/threading-multi/libboost_graph-mt-1_35.dylib" 
    "bin.v2/libs/graph/build/darwin/release/macosx-version-10.4/threading-multi/read_graphviz_spirit.o" 
    "bin.v2/libs/graph/build/darwin/release/macosx-version-10.4/threading-multi/graphml.o"   
    -lexpat   -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -Wl,-dead_strip -no_dead_strip_inits_and_terms

Не понимаю, как не найти библиотеку экспатов с -L"/usr/lib" и -lexpat в качестве аргументов? Насколько я понимаю, /usr/lib/libexpat.dylib в точности называется -L"/usr/lib" и -lexpat.

Jamfile для построения graphml здесь . Если EXPAT_INCLUDE и EXPAT_LIBPATH не установлены, он предупреждает вас (строки 39-41 из jamfile)

предупреждение: библиотека графиков не содержит дополнительного считывателя GraphML.
примечание: чтобы включить поддержку GraphML, установите EXPAT_INCLUDE и
примечание: каталоги, содержащие заголовки Expat и библиотеки соответственно.

1 Ответ

1 голос
/ 05 апреля 2009

Еще одно обновление: Я не вижу в вашем списке файлов .so или .a, где находится EXPAT ... не кажется ли это немного странным? Обычно это создает псевдоним для имени библиотеки

например /usr/lib/libblah.so -> /usr/lib/libblaah.so.1.2

Диналиб это какой-то макинтошизм (я мало пользуюсь Маками)

является .la статическим расширением версии на этой платформе?

Обновление:

Цитаты вокруг пути кажутся неприятными ... -L "/ usr / lib"

Попробуйте изменить это на -L / usr / lib и -L / usr / lib

Старые вещи:

Директива для компоновщика включать пути во время шага ссылки -L. Вам нужно найти некоторые флаги компоновщика для обновления, чтобы включить -L path_to_expat. Я не думаю, что компоновщик обращает какое-либо внимание на LD_LIBRARY_PATH. Я не уверен, какую документацию вы прочитали для установки EXPAT_INCLUDE или EXPAT_LIBPATH.

...