除了目标文件和共享dll之外还需要创建可执行文件

时间:2014-12-17 19:27:54

标签: c dll linker portable-executable

首先我描述一下我做了什么。我在Windows 7 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 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

对不起,如果这是一个太愚蠢的问题。

0 个答案:

没有答案