2013-02-06 130 views
1

我有一个基于C++的项目(许多源文件)使用gnu make通过makefile编译。 我有一个链接库的应用程序,说mylib。现在mylib由其他开发人员拥有。我看到存在于路径2个文件,其中的二进制库生成即 libmylib.so(共享对象)和libmylib.a添加(静态库归档文件)它会链接什么库 - 静态或共享对象

我的应用程序生成文件下面有链接器选项链接库MYLIB

LDFLAGS + = - 1:MYLIB ...

的问题是库MYLIB的是什么版本将在我的应用程序的可执行

链接将在共享对象libmylib.so或静态版本libmylib.a添加?

如何决定,是否有任何其他makefile选项来管理?

+1

我认为这取决于平台/编译器,但除非指定了“-static”,否则IIRC'gcc'默认为动态。 – 2013-02-06 14:22:32

回答

4

默认情况下,在非嵌入式Linux上,您将获得动态链接。如果你想改变它,你可以在LDFLAGS中指定它;

LDFLAGS+= -Wl,--Bstatic -lmylib -Wl,--Bdynamic 

(可能需要引号)这将只切换到静态只有这个库,然后回到默认的动态。

+0

谢谢。我会等待一天,看看在接受之前是否有其他答案。 – goldenmean

+0

只是查询人ld提到它是-Bstatic(--Bdynamic)而不是--Bstatic( - Bdynamic)。它究竟是什么? – goldenmean

+0

@goldenmean在Linux上,这两个选项似乎都适用于此选项,但您说得对,文档似乎赞成'-Bstatic'。 –