使用 gcc 链接共享库

Linking a shared library using gcc

提问人:goldenmean 提问时间:4/7/2009 最后编辑:goldenmean 更新时间:5/30/2017 访问量:119739

问:

我有一个共享库(*.so),使用Real View编译器工具(RVCT 3.2)在Windows目标上创建。然后我尝试在 linux 系统上使用 gcc 将这个 *.so 文件与我的应用程序链接起来。

将此共享库与我的应用程序 linux 链接的 gcc 选项是什么?

我的问题是,是选项,它被用作-shared

gcc -shared myfile.so

...,用于创建 SO 文件或链接 SO 文件?我相信它创造了类似的东西:

gcc -lmyfile.so

这够了吗?或者是否有任何其他开关来告诉链接器它是一个动态库(共享对象)?

GCC 链接器 共享库

评论


答:

28赞 jpalecek 4/7/2009 #1

gcc -lmyfile应该足够了(前提是您的库已命名)。链接器会尽可能搜索共享对象,AFAIK 会首选它们。libmyfile.so

评论

0赞 baskin 1/14/2010
我有一个相关的问题:如果我的库 libmyfile.so 是指向 libyourfile.so 的符号链接,使用 gcc -lmyfile 链接我的程序是否仍然有效?(我需要保持某些客户端的向后兼容性,这些客户端不知道库名称更改。
3赞 mrk 9/25/2012
@jpalecek 如果文件名的扩展名为 .dll,它是否有效?
1赞 Dragos Rizescu 11/25/2013
如果库不在怎么办?/usr/bin/ld
3赞 Diederik 2/5/2014
添加选项以添加搜索文件夹-L/path/to/so/folder/.so
0赞 Danijel 11/17/2016
我尝试在 Eclipse CDT 中链接,但是当我指定完整文件名时它无法链接 - 它仅在指定文件名而不带扩展名时有效:。因此,链接器选项是 .libraryName.dlllibraryName-llibraryName
65赞 mluc 11/3/2014 #2

对我有用的是:

gcc -L. -l:myfile.so

评论

10赞 Gowrav 2/11/2018
-L{包含库的文件的路径} -l${库名称} 如果我在 /home/newhall/lib/ 中有一个名为 libmine.so 的库,那么我会执行以下操作将其链接到我的程序中: $gcc -o myprog myprog.c -L/home/newhall/lib -lmine 参考站点
24赞 Harry Cutts 9/12/2018
对于那些想知道冒号的人,它让链接器查找具有指定确切名称的文件,而不是查找名称的变体。请参见 stackoverflow.com/a/48540643/1175455
1赞 Bemipefe 2/8/2019
链接时,动态库 (.so) 和静态库 (.a) 之间有什么区别吗?我一直认为动态库只在运行时使用,而不是在编译时使用。我错过了什么吗?
0赞 circl 12/29/2021
这表示“未定义的引用”,但它在文件中定义。为什么?
0赞 CS QGB 11/3/2022
/usr/bin/ld:找不到 -l:/