相关疑难解决方法(0)

仅使用g ++可以工作,但不能使用"g ++ -c"和ld

我在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)

c++ linker g++

10
推荐指数
3
解决办法
2万
查看次数

C:使用“ld”分别编译和链接组件程序?

我正在尝试理解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)

我有两个与此相关的问题:

1)

我知道我可以简单地同时将两个文件作为参数传递给 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)

c linker extern

1
推荐指数
1
解决办法
406
查看次数

标签 统计

linker ×2

c ×1

c++ ×1

extern ×1

g++ ×1