我正在尝试使用makefile编译我的项目。
最适合我的命令行是:
g++ -I stuff/ -L stuff2/ src/Core.cpp -o file_name -ljvm
如果最后我错过了-ljvm
,我在编译时会出现错误,那么这个标志必须在file_name
之后。问题是我无法使用makefile成功添加-ljvm
。
我的生成文件如下:
NAME = 'AI'
SRC = src
TGT = obj
PRG = application
INCLUDES = -Iinclude -I /usr/lib/jvm/java-7-openjdk-amd64/include/
LIBRARIES = -L /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/
CXXFLAGS = -Wall -O3 -std=c++0x $(INCLUDES) $(LIBRARIES)
SOURCES = $(wildcard $(SRC)/*.cpp)
OBJS = $(addprefix $(TGT)/, $(notdir $(SOURCES:.cpp=.o)))
$(TGT)/%.o: $(SRC)/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
$(PRG)/$(NAME): $(OBJS)
$(CXX) $(LDFLAGS) $(OBJS) -o $@
这给了我一个错误,因为我没有添加-ljvm
。
若我把它添加到:$(CXX) $(CXXFLAGS) -c $< -o $@ -ljvm
,并没有任何变化,我仍然得到相同的错误。
如果我把它添加到最后一行$(CXX) $(LDFLAGS) $(OBJS) -o $@ -ljvm
,我会得到一个不同的错误:
g++ obj/Core.o -o application/'AI' -ljvm
/usr/bin/ld: cannot find -ljvm
collect2: error: ld returned 1 exit status
make: *** [application/'AI'] Error 1
我有一种感觉,我错过了一些简单的东西。任何建议都将不胜感激。
您的最后一行使用了实际上从未定义过的$(LDFLAGS)
ld
抱怨找不到-ljvm
,那是因为你必须通过
-L /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/
到链接器(即,将其添加到您的最后一个命令中(
尝试定义至少包含$(LIBRARIES)
的LDFLAGS
。