首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++:无法链接到主可执行文件

g++:无法链接到主可执行文件
EN

Stack Overflow用户
提问于 2014-04-17 11:34:26
回答 2查看 15.2K关注 0票数 10

我正在开发一个应用程序,使用统计攻击破解wep密钥。

当我用makefile编译时(上面),我得到了以下错误:

ld:无法链接到架构x86_64的主可执行文件“x86_64” clang: error:链接器命令失败,退出代码1(使用-v查看调用) make:* statAttack错误1

我的项目包含以下文件:

  • statAttack.cpp :包含主函数,使用上面的文件
  • rc4.h + rc4.cpp :具有这些功能

#include # #include

  • bias.h + bias.cpp:

#include # # # #include #include #ifndef BIAIS #定义BIAIS使用命名空间std;endif pair IntegerDoublePair;向量get_bias (字符串,int);int compareTo (双,双);向量get_all_biases(字符串);#endif

  • 以及makefile:

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

所以我想请你帮忙,找出这个错误出现的原因。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-25 03:06:15

此错误通常意味着在编译简单程序时缺少一个-c,如下所示:

代码语言:javascript
复制
%.o: %.c
    $(CC) $(CFLAGS) -o $@ $^
Program: main.o
    $(CC) $(LDFLAGS) -o $@ $^

正在发生的事情是,第一个规则是按照您的要求构建main.o,但它不是一个对象文件,而是一个完整的、编译的和链接的程序。

当第二条规则试图将其用作对象文件时,链接器会发现它根本不是对象文件,并生成“无法与主可执行文件链接”。

显然,对于一个更复杂的程序,一个具有多个对象文件或库依赖项的程序,它无法仅从一个源文件构建一个可执行文件,因此您将得到一个不同的错误,并且永远无法达到链接规则的程度。

当然,解决方案是将-c添加到第一条规则中,以便第一次调用只编译而不链接,从而生成实际的对象文件。

代码语言:javascript
复制
%.o: %.c
    $(CC) $(CFLAGS) -c -o $@ $^
票数 13
EN

Stack Overflow用户

发布于 2015-01-24 22:07:42

(在评论中回答。见Question with no answers, but issue solved in the comments (or extended in chat) )

@Paul R写道:

源文件中有几个类型的输入,例如#include <vectorusing namespace std --您需要修复这些错误和其他类似的错误,才能有机会编译代码。

@Etan Reisner写道:

您还应该坚持拼写bias bias,而不是在某些地方也使用biais

“任择议定书”写道:

我终于找到了错误,这是在我的makefile中,那些行:naiveAttack : $(EXEC_NAME_NAIVE) statAttack : $(EXEC_NAME_STATALGO),因为可执行文件已经生成了,然后又进行了另一个编译,所以它生成了这个错误,为了获得更多的信息,我可以为那些有这种类型错误的人提供新的makefile。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23132047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档