使用gcc链接共享库

使用gcc链接共享库,gcc,linker,shared-libraries,Gcc,Linker,Shared Libraries,我在windows目标上使用Real View编译器工具(RVCT 3.2)创建了一个共享库(*.so)。然后我尝试在linux系统上使用gcc将这个*.so文件与我的应用程序链接 将此共享库与我的应用程序linux链接的gcc选项是什么 我的问题是,-shared选项是否用作 gcc -shared myfile.so …,用于创建SO文件或链接SO文件?我相信它创造了一些东西,比如: gcc -lmyfile.so 这够了吗?或者是否有其他开关告诉链接器它是一个动态库(共享对象)?gcc

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

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

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

gcc -shared myfile.so
…,用于创建SO文件或链接SO文件?我相信它创造了一些东西,比如:

gcc -lmyfile.so

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

gcc-lmyfile
应该足够了(前提是您的库名为
libmyfile.so
)。链接器在可能的情况下搜索共享对象,AFAIK更喜欢这些对象。

对我有效的是:

gcc -L. -l:myfile.so

我有一个相关的问题:如果我的库libmyfile.so是libyourfile.so的符号链接,那么使用gcc-lmyfile链接我的程序仍然有效吗?(我需要维护某些不知道库名称更改的客户端的向后兼容性。)@jpalecek在文件名扩展名为.dll的情况下工作吗?如果库不在
/usr/bin/ld
中怎么办?添加选项
-L/path/to/so/folder/
以添加
的搜索文件夹。因此
我尝试在Eclipse CDT中链接
libraryName.dll
,但是,当我指定完整文件名时,它无法链接-它仅在指定的文件名没有扩展名时有效:
libraryName
。因此,链接器选项是
-llibraryName
-L{path to file containing library}-L${library name}。如果我有一个名为libmine.So的库,那么在/home/newhall/lib/中,我会执行以下操作将它链接到我的程序中:$gcc-o myprog myprog.c-L/home/newhall/lib-lmine供那些想知道冒号的人使用,它使链接器查找具有指定的确切名称的文件,而不是查找名称的变体。请参阅。链接时,动态库(.so)和静态库(.a)之间有什么区别吗?我一直认为动态库只在运行时使用,而不是在编译时使用。我错过什么了吗?