c++ - g++ 找不到已安装的库

标签 c++ path compilation g++

我正在尝试编译需要所需库 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

最佳答案

Does this mean it's not seeing the library in /usr/local?

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

Can I specify this somewhere? Set a path or something?

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

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

关于c++ - g++ 找不到已安装的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33396602/

相关文章:

c++ - 递归最大S个整数

java - 如何反转命令行编译错误输出?

Java "new String[-1]"通过编译。怎么来的?

c++ - 如何取消引用函数指针并在 MSVC++ 下读取为数据?

c++ - 创建巨大的低多边形地形

ios - 在 IOS 上使用 Quartz 2d 以编程方式绘制线条动画

testing - 如何使用 mocha 运行不同文件夹中的所有测试文件?

python - VS Code python 扩展最近开始提示 Win10 上的路径错误

c++ - 代码更改不生效

c++ - 带有 cppwinrt 库的 Toast 通知 Windows 10