我在main.cpp中有以下源代码:
#include <iostream>
#include <iomanip>
int main() {
std::cout << "Hi" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用此命令可以工作,并创建可执行文件:
g++ -o main main.cpp
Run Code Online (Sandbox Code Playgroud)
但是这个命令不起作用:
g++ -c main.cpp
ld -o main main.o
Run Code Online (Sandbox Code Playgroud)
第二个错误:
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000e8
main.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `std::cout'
main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
main.cpp:(.text+0x14): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& …Run Code Online (Sandbox Code Playgroud) 我正在尝试理解extern和联系。作为一个简单的演示,我编写了两个 C 文件:一个使用函数的主文件和另一个定义该函数的文件:
/* main.c */
#include <stdio.h>
extern void print_nos(int, int);
int main(void) {
print_nos(10, 20);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
/* print_nos.c */
#include <stdio.h>
void print_nos(int lower, int higher) {
int i;
for (i = lower; i <= higher; i++)
printf("%d ", i);
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
我有两个与此相关的问题:
我知道我可以简单地同时将两个文件作为参数传递给 gcc:
gcc -o main main.c print_nos.c
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想使用显式进行链接ld,所以我这样做了:
/* main.c */
#include <stdio.h>
extern void print_nos(int, int);
int main(void) {
print_nos(10, 20);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,当我尝试运行输出文件时,我收到上述警告:
$ ./main …Run Code Online (Sandbox Code Playgroud)