我正在尝试使用makefile编译我的项目。
对我来说完美的命令行是:
g++ -I stuff/ -L stuff2/ src/Core.cpp -o file_name -ljvm
如果我最后错过-ljvm
,我在编译时会出错,这个标记必须在file_name
之后。问题是我无法使用makefile成功添加-ljvm
。
我的makefile如下所示:
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
我觉得我在这里缺少一些简单的东西。任何建议都非常感谢。
答案 0 :(得分:1)
您的最后一行使用的是实际上从未定义过的$(LDFLAGS)
ld
抱怨它无法找到-ljvm
,这是因为你必须通过
-L /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/
到链接器(即将其添加到上一个命令)
尝试定义LDFLAGS
,至少包含$(LIBRARIES)
。