实际上,分段错误发生在我试图编译的另一个程序中,这是因为这种行为.
我的问题是:
这是一个错误还是我的错?
可以任何方式重现(即使该something字段是私有的或受保护的),这是我的例子:
main.cc:
#include <iostream>
class Test {
public:
const char* something = "SOMETHING HERE!!!";
Test(const int& number) : Test(something, number) { }
// XXX: changed `something` to `_something` to make it different
Test(const char* _something, const int& number) {
std::cout << _something << std::endl;
std::cout << number << std::endl; }
~Test() { }
};
int main(int argc, char* argv[]) {
Test te1(345);
Test te2("asdasdad", 34523);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是编译时发生的情况:
g++ main.cc -Os -o main
Run Code Online (Sandbox Code Playgroud)
并运行: …
我在debian squeeze/stable下用gcc4.5 创建了我的bootloader 2年.现在在debian wheezy/sid中无法使用4.6和4.7进行编译,因为从这些中创建更大的部分我希望手工生成最终的二进制文件.这对我来说不是问题,因为在debian wheezy/sid中gcc4.5仍然存在,但我想使用gcc4.6和4.7 编译成为可能.
我像这样生成最终的二进制文件:
源文件编译为:
gcc-4.5 -Wall -O3 -c -m32 -I. -o assemblybin-objects/vga_pm.S.o vga_pm.S
Run Code Online (Sandbox Code Playgroud)
与连接:
ld -nostdlib -T binary.ld assemblybin-objects/vga_pm.S.o ... and other objects here ... -o bootloader.bin
Run Code Online (Sandbox Code Playgroud)
的内容binary.ld是:
OUTPUT_FORMAT("binary","binary","binary")
OUTPUT_ARCH(i386)
SECTIONS
{
. = 0;
.bootloader : {
. = 0x600;
*(.bootstrap);
. = 0x7fa;
BYTE(0x11);
BYTE(0x33);
BYTE(0x55);
BYTE(0x77);
BYTE(0x55);
BYTE(0xaa);
_bootstrap_end = .;
. = 0x800;
*(.sysinit);
_sysinit_end = .;
. = 0x1000;
*(.pages);
_pages_end = …Run Code Online (Sandbox Code Playgroud)