例如,假设我具有以下结构:
my_program
| main.c - defines main()
| foo.c - defined foo()
my_dll
| dll_start.c - defined dll_start()
| foo.c - defines foo()
其中main()调用foo(),然后调用dll_start()。
他们叫什么名字?例如:
?
基本上,我想知道是否在创建动态库时,链接器(链接器甚至运行吗?)在解析DLL自身内部的符号时是否始终在DLL中使用符号-例如,在这种情况下, my_dll中的foo()调用my_dll :: foo或my_program :: foo?
答案 0 :(得分:1)
是的,链接器运行以完成DLL的构建,并且需要foo
的定义才能构建。但是,只要不将包含my_program::foo
的同一代码库链接到my_dll.dll
,为链接DLL本身而选择的foo
将是my_dll::foo
。>
在这里唯一会麻烦的是,如果您有一个shared.lib
静态代码库,该库实现了一个独立的foo
函数,并且与EXE和DLL都链接在一起。如果DLL具有foo
的本地实现,则选择哪个DLL可能是模棱两可的。