【问题标题】:g++ can't find installed libraryg++找不到已安装的库
【发布时间】:2016-01-28 13:17:58
【问题描述】:

我正在尝试编译需要所需库 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 中看到该库?我可以在某处指定这个吗?设置路径什么的?

我已经确保从here 获得最新版本的 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/include/libmusicxml/ 中看不到文件libmusicxml.h 也许你需要写#include <libmusicxml/libmusicxml.h>
  • 您应该使用-I 指定搜索路径为-I/usr/local/include
  • -L 不起作用。这是缺少的标头而不是库。
  • @skypjack 该错误与 *.so 文件无关,而与 *.h 文件有关。所以应该是-I/usr/local/include/libmusicxml... 但是 /usr/local/include 是一个标准的包含路径。它应该在没有-I 的情况下工作
  • 你是对的,固定的。可能是该文件确实在libmusicxml 下。

标签: c++ path compilation g++


【解决方案1】:

在我运行之前无法识别库(和标题):

export LD_LIBRARY_PATH=/addressto/libmusicxml-master

这解决了它。

【讨论】:

    【解决方案2】:

    这是否意味着它没有在 /usr/local 中看到该库?

    这意味着它没有找到标题libmusicxml.h。您没有告诉编译器在 /usr/local/include/libmusicxml 中查找它。

    我可以在某处指定吗?设置路径还是什么?

    查看编译器的文档。在 gcc 中,包含搜索路径的选项是 -I

    我建议不要从/usr/local/include/libmusicxml/ 中搜索标题libmusicxml.h,而是包含libmusicxml/libmusicxml.h 并从/usr/local/include 中搜索。这会更简单,因为 g++ 默认从 /usr/local/include 搜索,因此不需要编译器选项。

    【讨论】:

    • 哦哇哦,当然,我已经习惯了自动生成文件了……马上试试。
    • 当使用 g++ xml2guido.cpp -I/usr/local/include/libmusicxml 编译时它现在给了我一个不同的错误。它找不到在 libmusicxml 标头中指定的函数。在函数 main': xml2guido.cpp:(.text+0xf9): undefined reference to musicxmlfd2guido' xml2guido.cpp:(.text+0x115): undefined reference to `musicxmlfile2guido' collect2: error: ld returned 1 exit status
    最近更新 更多