c++ - extern const char* const pointer 或 extern const char array[] 导致链接错误

标签 c++ c ld

<分区>

代码如下:

文件1.cc

#include <stdio.h>

const char *pointerString = "pointerString";
const char arrayString[] = "arrayString";
const char* const constpointerString = "constpointerString";

extern void printString();

int main(void)
{
    printString();
    return 0;
}

文件2.cc

#include <stdio.h>

extern const char *pointerString;
extern const char arrayString[];
extern const char* const constpointerString;

void printString()
{
    printf("pointerString: %s\n", pointerString);
    printf("arrayString: %s\n", arrayString);
    printf("constpointerString: %s\n", constpointerString);
}

复杂命令:g++ file1.cc file2.cc -o out 错误链接:

/tmp/cczatCe9.o: In function `printString()':
file2.cc:(.text+0x1f): undefined reference to `arrayString'
file2.cc:(.text+0x30): undefined reference to `constpointerString'
collect2: ld returned 1 exit status

g++版本:4.6.3(Unbuntu/Linaro 4.6.3-1ubuntu5)

谁能帮忙??

最佳答案

将您的外部声明放在头文件中,并将其包含在 两个源文件。发生的事情是在 file1.cc 中, arrayStringconstpointerString 有内部链接 (因为这是 const 对象的默认值),所以不能 从其他翻译单位可以看出。

当然,您也可以定义它们:

extern char const arrayString[] = "arrayString";
extern char const* const constpointerString = "constpointerString";

但一般来说,还是用header比较好。

关于c++ - extern const char* const pointer 或 extern const char array[] 导致链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23742856/

相关文章:

c - wav 文件的值

64-bit - MacOS Catalina 上的 ld64 segprot 不起作用?

c++ - 使用 SSE 和 AVX 查找矩阵中的最大元素及其列和行索引

c++ - Windows可执行文件向前和向后兼容吗?

c++ - 从树上摘苹果

命令行参数和文件输入 C

assembly - x86 示例程序中的段错误

linker - --unresolved-symbols=ignore-in-shared-libs 和 --allow-shlib-undefined 标志有什么区别

c++ - 编译器生成的构造函数

c++ - 为什么 string::c_str() 在动态分配字符串时返回 const char*?