【发布时间】:2014-12-18 08:42:58
【问题描述】:
我有一个将静态库链接到 Visual Studio(相同版本,相同机器)的应用程序。
这个库包含多个具有多个函数的 c 文件(像往常一样:)
举个例子
- lib1.lib
- file1.c
func_f1_1func_f1_2
- file2.c
func_f2_1func_f2_2
- file1.c
- prog1.exe
- (链接 lib1.lib)
- main.cpp
- 使用
func_f2_2
- 使用
- 奇怪的.c
-
func_f1_1(相同的签名,不同的定义) -
func_f2_1(相同的签名,不同的定义)
-
lib1 是从 prog1.exe 独立构建的
在链接期间编译器会抱怨
lib1.lib(file2.obj): error LNK2005: _func_f2_1 already defined in strange.obj
链接器不会抱怨func_f1_1!
我不完全理解这种错误,因为我希望链接器只从目标可执行文件中未定义的库中获取符号。
在我看来,链接器试图从 lib 中放入整个 obj 的内容,而不是仅放入函数。
我可以更改任何项目设置以使链接器在功能级别上工作吗? “函数级链接”在 lib 和程序项目的编译器属性中被激活。
【问题讨论】:
标签: visual-c++ linker visual-c++-2010