【发布时间】:2015-05-31 08:13:02
【问题描述】:
使用独立的 Android NDK r10e 工具链(使用 --toolchain=x86-clang3.6 开关构建)得到了这种奇怪的行为。交叉编译的环境变量已在运行makefile之前设置,SYSROOT指向Android工具链位置,CXX等于i686-linux-android-clang++。基本上,我有一堆想要编译为 Android 可执行文件的 cpp 文件。可悲的是,clang++ 一直在生成 .so 共享库(用 readelf 检查 - 它确实是共享对象)。是否有我忘记的编译器/链接器的特殊切换?
Makefile:(main.cpp 包含主函数)
CFLAGS=-c -Wall -std=c++11 -Wextra --sysroot=${SYSROOT} -march=i686
LDFLAGS=-lc -lc++_shared -L${SYSROOT}/usr/lib
SOURCES=main.cpp File1.cpp File2.cpp File3.cpp File4.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=test
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS) ${CXX} $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o: ${CXX} $(CFLAGS) $< -o $@
clean: rm *.o test
【问题讨论】:
-
你确定你已经正确地复制了你的makefile吗?在我看来,这个 makefile 很可能会给你 不知道如何构建 错误。先决条件之后/配方之前应该有一个换行符/TAB,否则它们应该用
;分隔。 -
@MadScientist 没错,这里少了TAB,可能粘贴的时候剪掉了。
-
缺少 TAB 在 StackOverflow 上很常见。缺少换行符不是很多... :)
标签: c++ makefile android-ndk clang