Tag: name mangling

在x64 DLL中强制名称修改

我正在将32位应用程序移植到64位。 该应用程序支持DLL的插件。 不幸的是,每个插件需要具有的强制函数之一称为FreeLibrary ,它当然与同名的kernel32 API冲突。 我的插件API使用FreeLibrary名称的原因是该应用程序源自FreeLibrary不与任何OS API冲突的不同平台。 但是,即使在使用FreeLibrary 32位Windows上也不是问题,因为32位DLL使用名称修改,即该函数存储为_FreeLibrary ,因此不会与kernel32 API冲突。 但是,在64位上,我现在遇到了一个问题,因为64位似乎没有使用名称修改。 在64位编译器创建一个名为FreeLibrary的符号,这当然与同名的kernel32 API冲突并拒绝链接,导致以下错误: Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. kernel32.lib(KERNEL32.dll) : error LNK2005: FreeLibrary already defined in test.o Creating library test.lib and object test.exp test.dll : fatal error LNK1169: one or more multiply defined symbols found 因此,我想知道是否有任何方法强制x64 […]

假设我没有使用任何重载函数,有没有办法可以阻止所有名称重整?

标题基本概括了所有内容。 我知道我可以使用和extern“C”块来阻止重复(尽管我不完全确定我应该把所谓的块放在哪里)但是有没有办法我可以为整个程序禁用它? 如果我这样做,是否会使用代码编译的库更容易使用luajit的FFI? 编辑:这被认为是重复的问题是特定于DLL和Visual C ++编译器。 我只是问一个普通的C ++问题。