mingw-w64
,
然后你也会得到
binutils
对于Windows PE二进制文件,您将能够使用
objcopy --keep-global-symbol
.
在书里找到它
bin
所选安装的目录,例如。
C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev0\mingw64\bin
然而。。。
你可能会有一个
XY problem
在这里,
因为链接器将解析输入序列中第一个库中的符号
它定义了它,而忽略了以后的库中的定义;所以你可以
优先考虑DLL中的定义,只需在静态
图书馆。举例说明:
foo_静态.c
#include <stdio.h>
void foo(void)
{
puts("foo_static");
}
#include <stdio.h>
void bar(void)
{
puts("bar_static");
}
fooèu动态.c
#include <stdio.h>
__declspec(dllexport) void foo(void)
{
puts("foo_dynamic");
}
gum\U动态.c
#include <stdio.h>
__declspec(dllexport) void gum(void)
{
puts("gum_dynamic");
}
*_static.c
将源文件和目标文件归档到静态库中
static.lib
:
>cl -c *_static.c
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
bar_static.c
foo_static.c
Generating Code...
>lib -out:static.lib *_static.obj
Microsoft (R) Library Manager Version 14.11.25547.0
Copyright (C) Microsoft Corporation. All rights reserved.
编译
*_dynamic.c
dynamic.dll
:
>cl -c *_dynamic.c
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
foo_dynamic.c
gum_dynamic.c
Generating Code...
>link -dll -out:dynamic.dll *_dynamic.obj
Microsoft (R) Incremental Linker Version 14.11.25547.0
Copyright (C) Microsoft Corporation. All rights reserved.
Creating library dynamic.lib and object dynamic.exp
foo
定义(不同)于
静态.lib
和
动态.dll
bar
仅在中定义
静态.lib
gum
仅在中定义
这是一个调用
福
酒吧
和
口香糖
主c
extern void foo();
extern void bar();
extern void gum();
int main()
{
foo();
bar();
gum();
return 0;
}
我们编译了:
>cl -c main.c
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
main.c
prog
这样地:
>link -out:prog.exe main.obj static.lib dynamic.lib
Microsoft (R) Incremental Linker Version 14.11.25547.0
Copyright (C) Microsoft Corporation. All rights reserved.
静态.lib
第一。程序输出:
>prog.exe
foo_static
bar_static
gum_dynamic
所以呢
已从解决
以及
被忽略了。
现在让我们重新链接库的顺序,并运行
再一次:
>link -out:prog.exe main.obj dynamic.lib static.lib
Microsoft (R) Incremental Linker Version 14.11.25547.0
Copyright (C) Microsoft Corporation. All rights reserved.
>prog.exe
foo_dynamic
bar_static
gum_dynamic
这次,
福
以及
被忽略了。