C 除了对象文件和共享DLL之外,创建可执行文件还需要什么

C 除了对象文件和共享DLL之外,创建可执行文件还需要什么,c,dll,linker,portable-executable,C,Dll,Linker,Portable Executable,首先,我描述一下我所做的工作。我正在Windows7 64位上使用cygwin 我首先在C语言中创建了一个简单的程序,比如著名的hello程序。然后我直接使用“gcc”编译生成“hello.exe”。然后我使用“ldd”命令检查了动态链接的库,并检查了它们的路径 $ldd hello.exe ntdll.dll=>/cygdrive/c/Windows/SYSTEM32/ntdll.dll(0x77a70000) kernel32.dll=>/cygdrive/c/Windows/system3

首先,我描述一下我所做的工作。我正在Windows7 64位上使用cygwin

我首先在C语言中创建了一个简单的程序,比如著名的hello程序。然后我直接使用“gcc”编译生成“hello.exe”。然后我使用“ldd”命令检查了动态链接的库,并检查了它们的路径

$ldd hello.exe

ntdll.dll=>/cygdrive/c/Windows/SYSTEM32/ntdll.dll(0x77a70000)

kernel32.dll=>/cygdrive/c/Windows/system32/kernel32.dll(0x77850000)

KERNELBASE.dll=>/cygdrive/c/Windows/system32/KERNELBASE.dll(0x7fefdb40000)

cygwin1.dll=>/cygdrive/c/Users/vishu/cygwin1.dll(0x180040000)

然后我创建了对象文件“hello.o”而不是生成可执行文件,然后使用链接器链接对象文件和共享库以创建“hello1.exe”。但当我尝试运行它时,它没有显示任何输出。我缺少什么

注意:当我为这两个文件使用“file”命令进行检查时,输出为

$file hello.exe

hello.exe:PE32+可执行文件(控制台)x86-64,适用于MS Windows

$file hello1.exe

hello1.exe:PE32+可执行文件(控制台)x86-64(剥离到外部PDB),适用于MS Windows

编辑评论:我不认为我编写了错误的命令,因为两个可执行文件的共享库是相同的。我认为两个可执行文件的类型不同,但我不知道“剥离到外部PDB”是什么意思。但正如您所问,我将在下面发布它们。我将所有dll复制到了对象文件所在的同一目录中hello.o(hello.exe和hello1.exe是同一个对象文件)

$ld-o hello1.exe hello.o ntdll.dll kernel32.dll KERNELBASE.dll cygwin1.dll


抱歉,这是一个太愚蠢的问题。

您是否从命令行运行程序?如果您运行
/hello.exe;echo$?
它打印hello,但对于hello1.exe,它不打印任何内容。我应该发布使用“nm”命令获得的符号吗?问题显然是在您输入以编译/链接程序的命令行中。请把那些台词发出去。