代码之家  ›  专栏  ›  技术社区  ›  hepl

gcc如何决定在创建可执行文件时使用dynamics库?

  •  0
  • hepl  · 技术社区  · 2 年前

    我正在用以下内容创建一个可执行文件:

    gcc elliptical.o -Llibs -lhfcal -o elliptical
    

    在我的libs子文件夹中有:

    libhfcal.a  libhfcal.so
    

    文件夹。我的目的是使用动态库,但我仍然不明白它是如何选择的 .so 当我没有明确引用它时。我知道你试着用它 所以 因为当我运行可执行文件时 ./elliptical: error while loading shared libraries: libhfcal.so: cannot open shared object file: No such file or directory

    使用静态库创建与动态库相同的可执行命令。我知道我需要使用 LD_LIBRARY_PATH 但我的问题是为什么编译器选择了dynamics库?

    1 回复  |  直到 2 年前
        1
  •  2
  •   kaylum    2 年前

    gcc manual (我的重点):

    -l图书馆

    链接时搜索名为library的库。(将库作为单独参数的第二个备选方案仅适用于POSIX合规性,不推荐使用。)

    -l选项由GCC直接传递给链接器。有关详细信息,请参阅链接器文档。下面的一般描述适用于GNU链接器。

    链接器搜索库的标准目录列表。搜索的目录包括几个标准系统目录,以及您用-L指定的任何目录。

    静态库是对象文件的存档,具有liblibrary这样的文件名。a、 一些目标还支持共享库,这些库通常有liblibrary这样的名称。所以 如果同时找到静态库和共享库,除非使用-static选项,否则链接器会优先使用与共享库的链接。