提问人:goldenmean 提问时间:4/7/2009 最后编辑:goldenmean 更新时间:5/30/2017 访问量:119739
使用 gcc 链接共享库
Linking a shared library using gcc
问:
我有一个共享库(*.so),使用Real View编译器工具(RVCT 3.2)在Windows目标上创建。然后我尝试在 linux 系统上使用 gcc 将这个 *.so 文件与我的应用程序链接起来。
将此共享库与我的应用程序 linux 链接的 gcc 选项是什么?
我的问题是,是选项,它被用作-shared
gcc -shared myfile.so
...,用于创建 SO 文件或链接 SO 文件?我相信它创造了类似的东西:
gcc -lmyfile.so
这够了吗?或者是否有任何其他开关来告诉链接器它是一个动态库(共享对象)?
答:
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.dll
libraryName
-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:/
评论