gpt4 book ai didi

c++ - C/C++ 静态链接错误 (LIBCMT.lib)

转载 作者:行者123 更新时间:2023-11-30 05:44:29 24 4
gpt4 key购买 nike

我有一个使用几个库的 C/C++ 程序 x64。

我使用的编译器:Microsoft (R) C/C++ Optimizing Compiler Version 18.00.31101 for x64

一开始我确实遇到了静态/动态链接的一些问题,但我已经解决了这些问题,并且我可以使用 MD 和 MDd 标志成功编译我的程序。现在,我想摆脱 C 运行时库 DLL。我想使用 MT 标志编译我的应用程序。

我使用的库:samtools 和 zlib(我在生成这两个库时使用 MT 标志)。最后,在链接过程中,即使我在所有编译过程中使用了相同的配置,我也会收到这样的错误。错误信息:

LIBCMT.lib(atox.obj) : error LNK2005: atoll already defined in libbam.lib(bam_import.obj)
myApplication.exe : fatal error LNK1169: one or more multiply defined symbols found
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\x8
6_amd64\link.exe"' : return code '0x491'

生成库和链接的命令:

    CC=cl.exe
AR= lib.exe
CFLAGS= /MT -c
INCLUDES= -I. -Iwin32

1st library:
ZLIB: $(OBJS)
$(AR) objectfiles

OBJS:
$(CC) $(CFLAGS) $(INCLUDES) sourcefiles

2nd library:
libbam.lib:$(LOBJS)
$(AR) $(LOBJS) $(BCFOBJS) /out:libbam.lib

BCFOBJ:
$(CC) $(CFLAGS) $(INCLUDES) sourcefiles

.c.obj: // LOBJS are generated here
$(CC) -c $(CFLAGS) $(INCLUDES) $< -o $@

我使用上面生成的库编译我的程序的命令:

    CC=cl.exe
LINK=link.exe

FLAGS= -Ox /MT -c
obj1.obj:
$(CC) $(FLAGS) test.cpp $(INCLUDES)

testMain.obj:
$(CC) $(FLAGS) testMain.cpp $(INCLUDES)
testMain.exe: $(OBJ)
$(LINK) obj1.obj testMain.obj $(LIBS) /OUT:testMain.exe

由于 makefile 很长,我尝试稍微简化一下,显示我为每个生成的库使用的标志。

提前致谢。

最佳答案

我已经解决了这个问题。显然,在我拥有的一个所需库的源文件中有一个名为 atoll() 的函数,并且在静态链接时,编译器试图链接系统 atoll() 函数;但是,其中一个已经在那里了。我重命名了所有源文件中的函数,但我无法静态编译我的应用程序。

关于c++ - C/C++ 静态链接错误 (LIBCMT.lib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29826330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com