Я пытаюсь скомпилировать и пример файла, который нуждается в необходимой библиотеке libmusicxml.
Я скомпилировал библиотеку, как они сказали (cmake, make, make install), и она сделала и установила несколько файлов:
Install the project...
-- Install configuration: ""-- Installing: /usr/local/lib/libmusicxml2.so.3.00
-- Installing: /usr/local/lib/libmusicxml2.so
-- Installing: /usr/local/include/libmusicxml/musicxmlfactory.h
-- Installing: /usr/local/include/libmusicxml/sortvisitor.h
-- Installing: /usr/local/include/libmusicxml/xmlreader.h
... etc
Теперь я хочу скомпилировать один из их примеров файлов, поэтому я запускаю g ++ filename.cpp, и он дает мне следующую ошибку:
libmusicxml.h: No such file or directory
Значит ли это, что он не видит библиотеку в / usr / local? Могу ли я указать это где-нибудь? Установить путь или что-то?
—ОБНОВИТЬ
Я удостоверился, что у меня последняя версия библиотеки libmusicxml от Вот и сделал то же самое (cmake с последующим make).
Когда я иду к примерам образцов и пытаюсь их создать (с предоставленным файлом make, который работает по словам разработчика), он не хочет делать это:
dorien@XP:~/bin/libmusicxml-master/samples$ make
gcc -g -O3 -Wall -Wuninitialized -I../src/elements -I../src/interface -I../src/files -I../src/lib -I../src/parser -I../src/visitors -I../src/guido -I../src/operations countnotes.cpp ../libmusicxml2.a -lstdc++ -o countnotes
gcc: error: ../libmusicxml2.a: No such file or directory
Makefile:14: recipe for target 'countnotes' failed
-> Я пытался найти libmusicxml2.a, а этого, похоже, не существует.
Когда я запускаю xml2guido (который, кажется, имеет скомпилированную версию в корневом каталоге пакета), я получаю:
xml2guido: error while loading shared libraries: libmusicxml2.so.3.00: cannot open shared object file: No such file or directory
Однако в этом же каталоге есть libmusicxml2.so.3.00.
Может, дело в том, что пакет неправильно связан? Или что-то про отсутствующий файл .a?
Я думаю, что он был построен правильно:
make
[ 73%] Built target musicxml2
[ 75%] Built target RandomMusic
[ 78%] Built target countnotes
[ 80%] Built target partsummary
[ 82%] Built target readunrolled
[ 85%] Built target xml2guido
[ 87%] Built target xml2midi
[ 90%] Built target xmlclone
[ 92%] Built target xmlfactory
[ 95%] Built target xmliter
[ 97%] Built target xmlread
[100%] Built target xmltranspose
dorien@XP:~/bin/libmusicxml-master$ sudo make install
[ 73%] Built target musicxml2
[ 75%] Built target RandomMusic
[ 78%] Built target countnotes
[ 80%] Built target partsummary
[ 82%] Built target readunrolled
[ 85%] Built target xml2guido
[ 87%] Built target xml2midi
[ 90%] Built target xmlclone
[ 92%] Built target xmlfactory
[ 95%] Built target xmliter
[ 97%] Built target xmlread
[100%] Built target xmltranspose
Install the project...
-- Install configuration: ""-- Up-to-date: /usr/local/lib/libmusicxml2.so.3.00
-- Up-to-date: /usr/local/lib/libmusicxml2.so
-- Up-to-date: /usr/local/include/libmusicxml/musicxmlfactory.h
-- Up-to-date: /usr/local/include/libmusicxml/sortvisitor.h
-- Up-to-date: /usr/local/include/libmusicxml/xmlreader.h
-- Up-to-date: /usr/local/include/libmusicxml/xmlfile.h
-- Up-to-date: /usr/local/include/libmusicxml/libmusicxml.h
-- Up-to-date: /usr/local/include/libmusicxml/unrolled_xml_tree_browser.h
-- Up-to-date: /usr/local/include/libmusicxml/xml.h
-- Up-to-date: /usr/local/include/libmusicxml/elements.h
-- Up-to-date: /usr/local/include/libmusicxml/factory.h
-- Up-to-date: /usr/local/include/libmusicxml/types.h
-- Up-to-date: /usr/local/include/libmusicxml/typedefs.h
-- Up-to-date: /usr/local/include/libmusicxml/xml_tree_browser.h
-- Up-to-date: /usr/local/include/libmusicxml/versions.h
-- Up-to-date: /usr/local/include/libmusicxml/exports.h
Значит ли это, что он не видит библиотеку в / usr / local?
Это означает, что он не нашел заголовок libmusicxml.h
, Вы не сказали компилятору искать его в /usr/local/include/libmusicxml
,
Могу ли я указать это где-нибудь? Установить путь или что-то?
Смотрите документацию вашего компилятора. В gcc опция для включения путей поиска -I
,
Вместо того, чтобы искать заголовок libmusicxml.h
от /usr/local/include/libmusicxml/
Я бы порекомендовал в том числе libmusicxml/libmusicxml.h
и поиск из /usr/local/include
, Это было бы проще, так как g ++ ищет из /usr/local/include
по умолчанию, поэтому никакие опции компилятора не потребуются.
Библиотека (и заголовки) не были распознаны, пока я не запустил:
export LD_LIBRARY_PATH=/addressto/libmusicxml-master
Это исправило это.