warning LNK4049: locally defined symbol是怎么回事?

yzx65 2008-06-26 04:47:45
请教了。
出现十几个
LINK : warning LNK4049: locally defined symbol "__mbsnbcpy" imported
LINK : warning LNK4049: locally defined symbol "_memmove" imported
LINK : warning LNK4049: locally defined symbol "_ceil" imported
LINK : warning LNK4049: locally defined symbol "_strstr" imported
LINK : warning LNK4049: locally defined symbol "__mbscmp" imported
LINK : warning LNK4049: locally defined symbol "_atol" imported
LINK : warning LNK4049: locally defined symbol "_wcslen" imported
LINK : warning LNK4049: locally defined symbol "_wcscpy" imported
LINK : warning LNK4049: locally defined symbol "__beginthreadex" imported
LINK : warning LNK4049: locally defined symbol "_vsprintf" imported
LINK : warning LNK4049: locally defined symbol "_free" imported
LINK : warning LNK4049: locally defined symbol "_malloc" imported
LINK : warning LNK4049: locally defined symbol "_atoi" imported


怎么解决??
...全文
3882 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
stolen007 2011-04-14
  • 打赏
  • 举报
回复
ehts gd
yzx65 2008-06-26
  • 打赏
  • 举报
回复
哦。我直接inorge了
  • 打赏
  • 举报
回复
没遇到过
这些都警告 忽略了吧
菜牛 2008-06-26
  • 打赏
  • 举报
回复
链接器工具警告 LNK4049

错误消息
已导入本地定义的符号“symbol”


该符号被同时从程序导出和导入到程序中。

当使用一个对象文件中的 __declspec(dllexport) 存储类属性声明符号,但使用另一对象文件中的 __declspec(dllimport) 属性引用该符号时,链接器将生成此警告。

警告 LNK4049 是链接器工具警告 LNK4217 的更为常见的形式。当链接器无法确定从哪个函数引用的导入符号时便会生成警告 LNK4049。

下面是生成 LNK4049 而不是 LNK4217 的常见情况:

使用 /INCREMENTAL 选项执行增量链接。

使用 /LTCG 选项执行全程序优化。

若要解决 LNK4049 问题,请执行以下操作之一:

从触发 LNK4049 的符号的前向声明中移除 __declspec(dllimport) 名称声明。您可以使用 DUMPBIN 实用工具在二进制图像中搜索符号。DUMPBIN /SYMBOLS 开关可显示该图像的 COFF 符号表。有关 DUMPBIN 实用工具的更多信息,请参见 DUMPBIN 参考。

暂时禁用增量链接和全程序优化。重新编译该应用程序将生成警告 LNK4217,警告中将包含从中引用所导入符号的函数的名称。请从导入的符号中移除 __declspec(dllimport) 声明,然后根据需要启用增量链接或全程序优化。

尽管最终生成的代码可以正常运行,不过,生成代码来调用导入的函数比直接调用该函数效率低。使用选项 /clr 进行编译时不会出现此警告。

有关导入和导出数据声明的更多信息,请参见 dllexport, dllimport。

示例
链接以下两个模块将生成 LNK4049。第一个模块生成一个对象文件,其中包含单个导出函数。

复制代码
// LNK4049a.cpp
// compile with: /c

__declspec(dllexport) int func()
{
return 3;
}


第二个模块生成一个对象文件,其中包含对第一个模块中导出的函数的前向声明以及在 main 函数中对此函数的调用。将此模块与第一个模块相链接将生成 LNK4049。移除 __declspec(dllimport) 声明将消除该警告。

复制代码
// LNK4049b.cpp
// compile with: /link /WX /LTCG LNK4049a.obj
// LNK4049 expected

__declspec(dllimport) int func();
// try the following line instead
// int func();

int main()
{
return func();
}

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧