首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >架构x86_64的未定义符号:. "_main",引用自:主可执行文件的隐式条目/开始

架构x86_64的未定义符号:. "_main",引用自:主可执行文件的隐式条目/开始
EN

Stack Overflow用户
提问于 2015-11-03 19:03:12
回答 3查看 28.7K关注 0票数 4

Yak-shaving警报。

虽然我被禁止显示任何源代码,我认为与一个写得很好的帖子,我可能能够提供足够的信息,以获得帮助。下面我尝试过的步骤都是从其他帖子中得到的,现在变得有点循环了。

我在OS上有以下内容:

代码语言:javascript
复制
MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ which g++
/usr/bin/g++

MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ arch
i386

MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr     
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr     
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ clang++ --version
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ brew --config
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: edcf1d119c4ca9d79d7147a684b7d74767cbb1f6
Last commit: 6 weeks ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: dual-core 64-bit penryn
OS X: 10.9.5-x86_64
Xcode: N/A
CLT: 6.2.0.0.1.1424975374
Clang: 6.0 build 600
X11: 2.7.7 => /opt/X11
System Ruby: 2.0.0-p481
Perl: /usr/bin/perl
Python: /Library/Frameworks/Python.framework/Versions/2.7/bin/python => /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: 1.6.0_65-b14-468

所以我得到了三份文件:

  • Metaphone3.cpp
  • Metaphone3ExampleCode.cpp
  • Metaphone3.h

我试着用g++编译:

代码语言:javascript
复制
g++ Metaphone3.cpp

我得到:

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
  • gcc和clang++的报道也是一样。
  • 添加-m32没有任何影响。
  • g++ Metaphone3.cpp -I /usr/local/include不起作用

如果我试着:

代码语言:javascript
复制
g++ -Wall -c Metaphone3.cpp

这消除了警告,生成了一个Metaphone3.oMetaphone

如果我试图执行:

代码语言:javascript
复制
MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ ./Metaphone
-bash: ./Metaphone: Malformed Mach-o file

一些更多的研究表明,我可能错过了一个链接步骤。所以:

代码语言:javascript
复制
gcc Metaphone3.o -o Metaphone3

但这让我回到了最初的错误。

其他帖子则建议删除-c标志,但正是这个标志使我能够传递错误。所以你可以看到它是如何变成圆形的。正如您现在可能正在聚集的那样,我是一个开发人员,但不是一个C++开发人员,来自Python的编译世界对我来说是一个新的世界。任何和所有的援助都很感激

EN

回答 3

Stack Overflow用户

发布于 2015-11-03 19:55:35

一个有教养的疯狂猜测:mainMetaphone3ExampleCode.cpp。您需要编译这两个对象,并将结果对象链接到一起。

试一试

代码语言:javascript
复制
    g++ -c Metaphone3.cpp
    g++ -c Metaphone3ExampleCode.cpp
    g++ -o Methaphone Metaphone3.o Metaphone3ExampleCode.o

代码语言:javascript
复制
    g++ -o Methaphone Metaphone3.cpp Metaphone3ExampleCode.cpp
票数 2
EN

Stack Overflow用户

发布于 2015-11-04 06:45:34

应该将metaphone3.cpp编译成一个.so --它是一个库,而不是一个应用程序

示例代码是作为指南提供的,并不打算进行编译。

如果您制作了metaphone3.so,您需要自己制作一个c++应用程序来链接到它并测试它

票数 2
EN

Stack Overflow用户

发布于 2020-10-12 23:22:53

如果其他人在google搜索中碰到这个错误,我会收到同样的错误,原因是一个简单的错误:maint()而不是main()

smh

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

https://stackoverflow.com/questions/33507069

复制
相关文章

相似问题

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