在Windows上使用Clang编译googletest

时间:2018-08-09 21:55:08

标签: c++ clang googletest

我正在尝试使用clang 6.0.1在Windows上编译googletest。提供了一个基本的makefile,该文件已经编译了库,但是无法链接示例。链接器抱怨文件处理中有7个无法解析的符号,例如fclose,fopen,creat。

C:\Program Files\LLVM\bin\lld-link: error: gtest_main.lib(gtest-all.o): undefined symbol: read
C:\Program Files\LLVM\bin\lld-link: error: gtest_main.lib(gtest-all.o): undefined symbol: close
C:\Program Files\LLVM\bin\lld-link: error: gtest_main.lib(gtest-all.o): undefined symbol: write
C:\Program Files\LLVM\bin\lld-link: error: gtest_main.lib(gtest-all.o): undefined symbol: fdopen
C:\Program Files\LLVM\bin\lld-link: error: gtest_main.lib(gtest-all.o): undefined symbol: dup
C:\Program Files\LLVM\bin\lld-link: error: gtest_main.lib(gtest-all.o): undefined symbol: creat
C:\Program Files\LLVM\bin\lld-link: error: gtest_main.lib(gtest-all.o): undefined symbol: dup2

使用Visual Studio,它可以毫无问题地进行编译和链接。我使用了MSVC的命令行并对其进行了修改,但clang仍然没有链接。 这是我正在使用的改编的makefile:

CXX = clang++
AR = llvm-ar
CPPFLAGS += -isystem $(GTEST_DIR)/include -D"WIN32" -D"WINDOWS" -D"_WINDOWS" -D"_WIN32" -D"STRICT" -D"WIN32_LEAN_AND_MEAN" -D"GTEST_HAS_PTHREAD"=0 -D"_HAS_EXCEPTIONS"=1
CXXFLAGS += -g -Wall -Wextra

LINKFLAGS = -l"kernel32.lib" -l"user32.lib" -l"gdi32.lib" -l"winspool.lib" -l"shell32.lib" -l"ole32.lib" -l"oleaut32.lib" -l"uuid.lib" -l"comdlg32.lib" -l"advapi32.lib" -l"libucrt.lib" -l"libcmt.lib" -l"msvcrt.lib" -l"libvcruntime.lib" -l"libcpmt.lib"
gtest.lib : gtest-all.o
    $(AR) $(ARFLAGS) $@ $^
sample1_unittest.exe : sample1.o sample1_unittest.o gtest_main.lib
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LINKFLAGS) -fuse-ld=lld -v $^ -o $@

当使用link.exe而不是lld时,会发生相同的错误,但是在MSVC中进行编译时效果很好。所以我想我只是错误地翻译了MS工具的一个选项,或者错过了一个库。是否有任何提示或有人已经在Windows上使用clang编译了googletest?

0 个答案:

没有答案