使用gcc -v
手动编译是否可以编译一个简单的Hello World程序,该程序仅使用提供的gcc/glibc文件而不是使用操作系统提供的默认程序? (因此,执行时,程序将只使用提供的文件而不是操作系统提供的文件。)我在网上无处不在,但无法继续工作:使用gcc -v
我试图手动执行此操作gcc -v simple.c但我无法自己复制它。
这是我的尝试:(提供的所有文件都在桌面上)
/home/myuser/Desktop/cc1 -quiet -v simple.c -quiet -dumpbase simple.c -mtune=generic -auxbase simple -version -o /tmp/temp1.s
如何能在以下路径更改为自定义的,而不是默认的?
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include search starts here: /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. GNU C (Debian 4.4.5-8) version 4.4.5 (x86_64-linux-gnu) compiled by GNU C version 4.4.5, GMP version 4.3.2, MPFR version 3.0.0-p3. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: dac4d891d068d1bed01868869b00bd17
as -V -Qy -o /tmp/temp2.o /tmp/temp1.s
GNU assembler version 2.20.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.20.1-system.20100303
/home/myuser/Desktop/collect2 --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=both -dynamic-linker ld-2.11.2.so crt1.o crti.o crtbegin.o /tmp/temp2.o libgcc.a --as-needed libgcc_s.so.1 --no-as-needed libc.a libgcc_s.so.1 --as-needed libgcc.a --no-as-needed crtend.o crtn.o
为什么是用来代替所提供的ld-2.11.2.so下面的/ usr/bin中/ LD?
/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie collect2: ld returned 1 exit status
任何人都可以修改它的工作?
-v
向您显示编译器驱动程序执行的操作。它不会影响你得到的标准库。
要使用所有自定义库运行,请使用-nostdlib
。
如何将下面的路径更改为 定制的而不是默认的?
只需将-I path
添加到编译器调用。该路径将在内部路径之前添加。
为什么下面的/ usr/bin中/ LD使用 ,而不是提供ld-2.11.2.so?
第一个是可执行二进制文件,第二个是共享对象。您不能在二进制文件中使用共享对象。
我用-I,仍然得到相同的确切的错误。为什么? – 2011-04-23 17:40:12
@Janet你的意思是链接错误?那是因为你没有编译位置独立的可执行文件支持。但我认为这就是你想要做的。 '-I'当然只是修改包含路径。当然,包括路径与链接无关。请尝试解释你试图达到的目标。你的问题并不清楚。 – 2011-04-23 17:56:34
我试过了,它也不起作用:gcc -nostdlib /home/myuser/Desktop/libgcc.a /home/myuser/Desktop/libc.a simple.c/usr/bin/ld:warning:找不到条目符号_start;默认为0000000000400144 /tmp/ccDFp8hh.o:在函数'main'中: simple.c :(。text + 0x1d):未定义的引用'memcpy' simple.c :(.text + 0x29):未定义的引用'puts' collect2:ld返回1退出状态 – 2011-04-23 17:43:33
@Janet:您需要在库路径名之前加上'-l',例如'-l/home/myuser/Desktop/libgcc.a'。 – Potatoswatter 2011-04-23 17:57:37