科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件解决出现的LNK2005“符号已定义”错误 (4)

解决出现的LNK2005“符号已定义”错误 (4)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

解决出现的LNK2005“符号已定义”错误 (4)

作者:soloist 来源:Blog 2007年11月27日

关键字: 符号已定义 LNK2005 解决 Linux

  • 评论
  • 分享微博
  • 分享邮件

或者

link main.obj

来生成可执行文件main.exe,这两个命令是等价的。但是如果你用

link main.obj libcd.lib

的话,链接器会给出一个警告: "warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library",因为你显式指定的标准库版本与目标文件的缺省值不一致。通常来说,应该保证链接器合并的所有目标文件指定的缺省标准库版本一致,否则编译器一定会给出上面的警告,而LNK2005和LNK1169链接错误则有时会出现有时不会。那么这个有时到底是什么时候?呵呵,别着急,下面的一切正是为喜欢追根究底的你准备的。

    建一个源文件,就叫mylib.c,内容如下:

/* mylib.c */
#include

void foo()
{
   printf("%s","I am from mylib!\n");
}

cl /c /MLd mylib.c

命令编译,注意/MLd选项是指定libcd.lib为默认标准库。lib.exe是VC自带的用于将目标文件打包成程序库的命令,所以我们可以用

lib /OUT:my.lib mylib.obj

将mylib.obj打包成库,输出的库文件名是my.lib。接下来把main.c改成:

/* main.c */
void foo();

int main()
{
   foo();
   return 0;
}

cl /c main.c

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章