我正在开发一个应用程序,使用统计攻击破解wep密钥。
当我用makefile编译时(上面),我得到了以下错误:
ld:无法链接到架构x86_64的主可执行文件“x86_64” clang: error:链接器命令失败,退出代码1(使用-v查看调用) make:* statAttack错误1
我的项目包含以下文件:
#include # #include
#include # # # #include #include #ifndef BIAIS #定义BIAIS使用命名空间std;endif pair IntegerDoublePair;向量get_bias (字符串,int);int compareTo (双,双);向量get_all_biases(字符串);#endif
CC = g++ -g LDFLAGS = -lm EXEC_NAME_NAIVE = execNaiveAttack EXEC_NAME_STATALGO = execStatAttack OBJ_FILES_NAIVE =naveAttack.o biais.o rc4.o OBJ_FILES_STATALGO = statAttack.o biais.o rc4.o naiveAttack:$(EXEC_NAME_NAIVE) statAttack:$(EXEC_NAME_STATALGO) $(EXEC_NAME_NAIVE):$(OBJ_FILES_NAIVE) $(CC) $(OBJ_FILES_NAIVE) $( OBJ_FILES_NAIVE) $(LDFLAGS) -o $(LDFLAGS)-o$(LDFLAGS)EXEC_NAME_NAIVE$(EXEC_NAME_NAIVE) $(EXEC_NAME_STATALGO):$(OBJ_FILES_STATALGO) $(CC) $(OBJ_FILES_STATALGO) $(OBJ_FILES_STATALGO) -o $(EXEC_NAME_STATALGO) %.o:%.cpp $(CC) $(CFLAGS) -o $@ -c $<洁净: rm -f $(OBJ_FILES_NAIVE) $(OBJ_FILES_STATALGO)mr本体: clean -rf $(EXEC_NAME_NAIVE) $(EXEC_NAME_STATALGO) $(EXEC_NAME_STATALGO)
这是我的配置(终端):
==> g++ --版本 配置为:--prefix=/Applications/Xcode.app/Contents/Developer/usr -with include-dir=/usr/include/c++/4.2.1 Apple LLVM版本5.1 (clang-503.0.40) (基于LLVM 3.4svn) 目标: x86_64-apple-darwin13.1.0 线程模型: posix
所以我想请你帮忙,找出这个错误出现的原因。
谢谢。
发布于 2015-07-25 03:06:15
此错误通常意味着在编译简单程序时缺少一个-c,如下所示:
%.o: %.c
$(CC) $(CFLAGS) -o $@ $^
Program: main.o
$(CC) $(LDFLAGS) -o $@ $^正在发生的事情是,第一个规则是按照您的要求构建main.o,但它不是一个对象文件,而是一个完整的、编译的和链接的程序。
当第二条规则试图将其用作对象文件时,链接器会发现它根本不是对象文件,并生成“无法与主可执行文件链接”。
显然,对于一个更复杂的程序,一个具有多个对象文件或库依赖项的程序,它无法仅从一个源文件构建一个可执行文件,因此您将得到一个不同的错误,并且永远无法达到链接规则的程度。
当然,解决方案是将-c添加到第一条规则中,以便第一次调用只编译而不链接,从而生成实际的对象文件。
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^发布于 2015-01-24 22:07:42
(在评论中回答。见Question with no answers, but issue solved in the comments (or extended in chat) )
@Paul R写道:
源文件中有几个类型的输入,例如
#include <vector和using namespace std--您需要修复这些错误和其他类似的错误,才能有机会编译代码。
@Etan Reisner写道:
您还应该坚持拼写
biasbias,而不是在某些地方也使用biais。
“任择议定书”写道:
我终于找到了错误,这是在我的makefile中,那些行:
naiveAttack : $(EXEC_NAME_NAIVE) statAttack : $(EXEC_NAME_STATALGO),因为可执行文件已经生成了,然后又进行了另一个编译,所以它生成了这个错误,为了获得更多的信息,我可以为那些有这种类型错误的人提供新的makefile。
https://stackoverflow.com/questions/23132047
复制相似问题