C++ 体系结构 x86_64 的未定义符号:...“_main”,引用自:主可执行文件的隐式入口/开始
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/33507069/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Undefined symbols for architecture x86_64: ... "_main", referenced from: implicit entry/start for main executable
提问by Pyderman
Yak-shavingalert.
牦牛剃须警报。
Although I am precluded from displaying any source code, I figure with a well-written post I may be able to provide enough info to get assistance. The steps I have tried below have all been garnered from other posts, and it's becoming a bit circular now.
虽然我无法显示任何源代码,但我认为我可以通过一篇写得很好的帖子提供足够的信息来获得帮助。我在下面尝试的步骤都是从其他帖子中获得的,现在变得有点循环了。
I'm on OS X with the following:
我在 OS X 上使用以下内容:
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
So I am given three files:
所以我得到了三个文件:
- Metaphone3.cpp
- Metaphone3ExampleCode.cpp
- Metaphone3.h
- Metaphone3.cpp
- Metaphone3ExampleCode.cpp
- Metaphone3.h
I try to compile with g++:
我尝试用 g++ 编译:
g++ Metaphone3.cpp
I get:
我得到:
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 and clang++ report the same.
- Adding -m32 has no affect.
g++ Metaphone3.cpp -I /usr/local/include
has no effect
- gcc 和 clang++ 报告相同。
- 添加 -m32 没有影响。
g++ Metaphone3.cpp -I /usr/local/include
没有效果
If I try:
如果我尝试:
g++ -Wall -c Metaphone3.cpp
This gets rid of the warning, and a Metaphone3.oand Metaphoneget generated.
这消除了警告,并生成了Metaphone3.o和Metaphone。
If I try to execute:
如果我尝试执行:
MacBook-Pro-de-Pyderman:Metaphone3 Pyderman$ ./Metaphone
-bash: ./Metaphone: Malformed Mach-o file
Some more research indicates that I may have missed a linking step. So:
更多的研究表明我可能错过了一个链接步骤。所以:
gcc Metaphone3.o -o Metaphone3
But this brings me back to the original error.
但这让我回到了最初的错误。
Other posts then suggest dropping the -c
flag, but it is this very flag that enabled me to get passed the error. So you can see how this is getting circular. As you may be gathering by now, I am a developer, but not a C++ developer, and coming from Python, the compilation world is a new one to me. Any and all assistance appreciated
其他帖子然后建议删除-c
标志,但正是这个标志使我能够通过错误。所以你可以看到这是如何循环的。正如您现在所知道的那样,我是一名开发人员,但不是 C++ 开发人员,而且来自 Python,编译世界对我来说是一个全新的世界。任何和所有的帮助表示赞赏
回答by user58697
An educated wild guess: main
is in Metaphone3ExampleCode.cpp
. You need to compile both, and link the resulting objects together.
一个有根据的疯狂猜测:main
在Metaphone3ExampleCode.cpp
. 您需要编译两者,并将生成的对象链接在一起。
Try
尝试
g++ -c Metaphone3.cpp
g++ -c Metaphone3ExampleCode.cpp
g++ -o Methaphone Metaphone3.o Metaphone3ExampleCode.o
or
或者
g++ -o Methaphone Metaphone3.cpp Metaphone3ExampleCode.cpp
回答by lawrence philips
metaphone3.cpp should be compiled to an .so - it's a library and not an application
metaphone3.cpp 应该编译为 .so - 它是一个库而不是一个应用程序
the example code is provided as a guide and is not intended to be compiled
示例代码作为指南提供,不打算编译
if you make metaphone3.so, you'll need to make a c++ application yourself to link to it and test it
如果你制作metaphone3.so,你需要自己制作一个c++应用程序来链接它并测试它