linux 如何解决将.so库链接到c代码的问题?

nbnkbykc  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(196)

将.so文件链接到main1.c时遇到问题
首先,我使用下面的命令从多个c源文件和头文件创建.so文件。

  • -libmylib1.so-------------------------------------------------------
    然后,我在同一个文件夹(~/Docs/examples)中创建了main1.c文件,并使用以下命令为main1.c生成了另一个.so文件,该文件使用libmylib1.so
  • -libmain2.so----------------------------------------------------------
    当我将libmylib1.so文件复制到另一个文件夹并尝试将其与另一个code.c文件一起使用时,它不起作用。新文件夹只包含libmylib1.so和code.c。以下是我使用的命令。
  • -libcode1.so----------------------------------------------------------------
    但是当我添加{-idirafter ~/Docs/examples}并包含www.example.com的原始位置时libmylib1.so,它似乎可以工作。
    以下是我的一些尝试:

**abc@abc-TULPAR-T5-V21-4:~/文档/新位置$**ls

代码. libmylib1.so
我的意思是说,如果你是一个很好的libcode1.so。
代码C:1:10:致命错误:命令生成库:无此文件或目录
一个|#包含“comm_genlib. h”
| ^~~~~~~~~~~~~~~
编译已终止。
我的意思是说,如果你是一个人,那么你就可以把你的名字写libcode1.so。

**abc@abc-TULPAR-T5-V21-4:~/文档/新位置$**ls

请访问:libcode1.solibmylib1.so
我不知道为什么当我添加-idirafter ~/Docs/examples时它会起作用
如何解决这个问题?

niwlg2el

niwlg2el1#

编译过程中有两个重要阶段:源代码到原始二进制代码的转换以及形成可执行文件或共享库所需的所有原始二进制代码的打包。
对于第一阶段,编译器必须能够访问所有源文件:命令行上引用的.“c”以及这些.“c”中由#include指令引用的所有其他源文件。
为了找到这些源代码,编译器会在某些特定于编译器的目录中查找,如/usr/include;它还搜索当前目录。
但是~Docs/examples目录不是默认搜索目录的一部分,因此无法解析对comm_genlib.h的引用,编译崩溃。
-idirafter选项将这个目录添加到搜索路径中。这就是为什么当添加这个目录时编译工作正常的原因。
在第一个阶段中,不使用二进制文件,比如.so文件,它们将在编译的第二个阶段中使用。仅在第一阶段用作纯文本文件。
对于您遇到的问题没有特定的解决方案,因为最终它不是问题,而是“C”编译器的工作方式。

相关问题