【发布时间】:2021-07-12 18:09:31
【问题描述】:
我正在尝试使用 clang++ 编译器使用 make cmd 在 WSL 2 上编译一个 c++ 项目。
我收到以下消息:
root@DESKTOP-1I1NU1L:/mnt/c/users/LaVision/source/Yoakum# make
clang++ -std=c++17 -stdlib=libc++ -I/usr/include/boost/ -o YOAKUM.exe driver.o
/usr/bin/ld: cannot find -lc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:10: YOAKUM.exe] Error 1
这是我的制作文件的副本:
CC := clang++
export CPLUS_INCLUDE_PATH = /usr/include/c++/8
:/usr/include/x86_64-linux-gnu/c++/8
FLAGS := -std=c++17 -stdlib=libc++ -I/usr/include/boost/
all: YOAKUM.exe
OBJECTS := driver.o
YOAKUM.exe: $(OBJECTS)
$(CC) $(FLAGS) -o YOAKUM.exe $(OBJECTS)
driver.o: driver.cpp driver.hpp configure.hpp Dust_State.hpp\
configure.hpp System.hpp io_observers.hpp basic_forces.hpp\
interaction_forces.hpp Vector.hpp
$(CC) $(FLAGS) -c driver.cpp
我使用的是 4.2.1 版。 Clang 版本 7.0.1-8+deb10u2。
任何帮助都将不胜感激,因为我是一个新开发者并且完全被这个问题难住了。
【问题讨论】:
-
在链接时,您应该使用与提供给编译器的选项不同的选项,
LDFLAGS和FLAGS,并在调用链接器时代替FLAGS。 -
对不起,如果答案很明显,但我应该将 FLAGS 和 LDFLAGS 设置为什么?这会迫使我更改在当前 make 文件中使用 FLAGS 的位置吗? @user4581301
-
不明显,但很难确定您需要哪些选项。我试图解决这个问题,但我搞砸了。 LDFLAGS 上发生的事情变化太大。你可能不需要任何东西。但由于您包含了 boost,您可能需要
LDFLAGS := -L<path to boost lib folder>和a LIB := -l<boost library used>。然后你得到$(CC) $(LDFLAGS) -o YOAKUM.exe $(OBJECTS) $(LIBS)` -
从
$(CC) $(FLAGS) -o YOAKUM.exe $(OBJECTS)中删除$(FLAGS)开始,看看链接器抱怨什么。 -
还有 SOS... 那是什么操作系统?
标签: c++ makefile linker windows-subsystem-for-linux clang++