gpt4 book ai didi

linux - 在 Linux 中使用静态库

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:02 27 4
gpt4 key购买 nike

我使用的是 linux,我已经下载了我想使用的 soem1.3.0 库的 tarball。我已经编译了这个库,现在我想使用它。问题是,我不知道该怎么做。

我有一个名为“Project”的文件夹,在这个文件夹中我有一个名为“Project/SOEM1.3.0”的包含已编译库的子文件夹(此子文件夹包含更多包含 .a 文件、头文件和源文件的文件夹)。项目文件夹中还有我的主要功能源文件“Project/main.cpp”。当我尝试编译这个 main.cpp 时,编译器 (g++) 说我试图包含的头文件是未知的。

我想我必须告诉编译器在哪里可以找到库,但我该怎么做呢?我尝试将整个 SOEM1.3.0 文件夹复制到/usr/lib,假设我的编译器能够找到它,但这没有用。谁能告诉我该怎么做?

更新:我已经能够通过使用“-I path/to/headers”来包含标题。但是现在编译器/链接器提示它找不到头文件中描述的函数。我尝试使用“-L path/to/libsoem.a -l soem -I path/to/headers”但没有结果。有什么建议么?需要说明的是,这些库称为 libsoem.a、libosal.a 和 liboshw.a,我正在尝试的命令是:

gcc -L SOEM1.3.0/lib/linux -l soem -l osal -l oshw -I SOEM1.3.0/soem -I SOEM1.3.0/osal
-I SOEM1.3.0/oshw/linux -o 测试main.cpp

最佳答案

要告诉 gcc 在编译期间在哪里寻找头文件,请使用 -I 选项(lib 与头文件无关,编译不需要库,即当您使用 -c 选项时)。

您需要在链接阶段告诉 gcc,例如当您使用 -o 名称创建可执行文件时,要使用哪些库以及库所在的位置。如果需要某个库,请使用 -l 选项:对于 libmath,您可以指定 -lmath;相应地与其他 lib* 库。如果这些库位于非标准目录中,您可以使用 -L 选项将其告知 gcc。或者您只需手动或通过 make install 将它们放入系统的正常 lib 目录之一。

编辑:我忘了提到一个不直观但合乎逻辑的要求,即使用 -l 提供给链接器的库必须出现在依赖于的库、对象或源文件之后他们,即通常在最后。链接器只是从库中挑选此时 所需的定义,它(幸运的是)不会将所有内容混为一谈。

库之间的顺序也很重要,如果它们中的任何一个具有 Unresolved 依赖关系。

关于linux - 在 Linux 中使用静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22515690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com