不能用gcc编译基本程序 ubuntu ld: unrecognized options -p

问题描述 投票:0回答:1

我从sourceforge安装了一个叫libelf的库。https:/sourceforge.netprojectselftoolchainfilesSources。 我安装了INSTALL文件下列出的所有包,似乎库安装成功。我附上了下面的一些输出

我用下面两行来安装这个库

% pmake
% sudo pmake install

install ===> common
install ===> libelf
install   -c  -o root  -g root -m 600 libelf.a /usr/lib/x86_64-linux-gnu/libelf.a
ranlib -t /usr/lib/x86_64-linux-gnu/libelf.a
chmod 644 /usr/lib/x86_64-linux-gnu/libelf.a
install   -c  -o root  -g root -m 600 libelf_p.a /usr/lib/x86_64-linux-gnu/libelf_p.a
ranlib -t /usr/lib/x86_64-linux-gnu/libelf_p.a
chmod 644 /usr/lib/x86_64-linux-gnu/libelf_p.a
gzip -9cf elf.3 > /usr/share/man/man3/elf.3.gz
gzip -9cf elf_begin.3 > /usr/share/man/man3/elf_begin.3.gz
gzip -9cf elf_cntl.3 > /usr/share/man/man3/elf_cntl.3.gz
gzip -9cf elf_end.3 > /usr/share/man/man3/elf_end.3.gz
gzip -9cf elf_errmsg.3 > /usr/share/man/man3/elf_errmsg.3.gz
gzip -9cf elf_fill.3 > /usr/share/man/man3/elf_fill.3.gz
gzip -9cf elf_flagdata.3 > /usr/share/man/man3/elf_flagdata.3.gz
gzip -9cf elf_getarhdr.3 > /usr/share/man/man3/elf_getarhdr.3.gz
gzip -9cf elf_getarsym.3 > /usr/share/man/man3/elf_getarsym.3.gz
gzip -9cf elf_getbase.3 > /usr/share/man/man3/elf_getbase.3.gz
gzip -9cf elf_getdata.3 > /usr/share/man/man3/elf_getdata.3.gz
gzip -9cf elf_getident.3 > /usr/share/man/man3/elf_getident.3.gz
gzip -9cf elf_getscn.3 > /usr/share/man/man3/elf_getscn.3.gz
gzip -9cf elf_getphdrnum.3 > /usr/share/man/man3/elf_getphdrnum.3.gz
gzip -9cf elf_getphnum.3 > /usr/share/man/man3/elf_getphnum.3.gz
gzip -9cf elf_getshdrnum.3 > /usr/share/man/man3/elf_getshdrnum.3.gz
gzip -9cf elf_getshnum.3 > /usr/share/man/man3/elf_getshnum.3.gz
gzip -9cf elf_getshdrstrndx.3 > /usr/share/man/man3/elf_getshdrstrndx.3.gz
gzip -9cf elf_getshstrndx.3 > /usr/share/man/man3/elf_getshstrndx.3.gz
gzip -9cf elf_hash.3 > /usr/share/man/man3/elf_hash.3.gz
gzip -9cf elf_kind.3 > /usr/share/man/man3/elf_kind.3.gz
gzip -9cf elf_memory.3 > /usr/share/man/man3/elf_memory.3.gz
gzip -9cf elf_next.3 > /usr/share/man/man3/elf_next.3.gz
gzip -9cf elf_open.3 > /usr/share/man/man3/elf_open.3.gz
gzip -9cf elf_rawfile.3 > /usr/share/man/man3/elf_rawfile.3.gz
gzip -9cf elf_rand.3 > /usr/share/man/man3/elf_rand.3.gz
gzip -9cf elf_strptr.3 > /usr/share/man/man3/elf_strptr.3.gz
...more stuff...
install ===> libdwarf
...more stuff...
install ===> test
Nothing to install.
install ===> documentation
install ===> documentation/libelf-by-example
install -g root -o root libelf-by-example.pdf  //usr/share/doc/elftoolchain

我试着做了文档中的一个例子,我试着用cc -o prog1 prog1.c -lelf,结果给出了这样的消息。

ld: unrecognized option -pcollect2: error: ld returned 1 exit status(退出状态)

事实上,任何试图编译的c项目都会给我同样的信息,例如,一个基本的hello world.c,我用gcc -o hello hello.c编译后,得到的信息是

ld: unrecognized option -pcollect2: error: ld returned 1 exit status(退出状态)

#include <err.h>
#include <fcntl.h>
#include <libelf.h> 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
int fd;
Elf *e; 
char *k;
Elf_Kind ek; 
if (argc != 2)
    errx(EXIT_FAILURE, "usage: %s file-name", argv[0]);

if (elf_version(EV_CURRENT) == EV_NONE)
    errx(EXIT_FAILURE, "ELF library initialization "
        "failed: %s", elf_errmsg(-1));

if ((fd = open(argv[1], O_RDONLY, 0)) < 0)
    err(EXIT_FAILURE, "open \%s\" failed", argv[1]);

if ((e = elf_begin(fd, ELF_C_READ@\co{5}@, NULL)) == NULL)
    errx(EXIT_FAILURE, "elf_begin() failed: %s.",
        elf_errmsg(-1)); 

ek = elf_kind(e); 

switch (ek) {
case ELF_K_AR:
    k = "ar(1) archive";
    break;
case ELF_K_ELF:
    k = "elf object";
    break;
case ELF_K_NONE:
    k = "data";
    break;
default:
    k = "unrecognized";
}

(void) printf("%s: %s\n", argv[1], k);

(void) elf_end(e); 
(void) close(fd);

exit(EXIT_SUCCESS);
}

我使用的是ubuntu 16.04,安装文件中提到这个库是为ubuntu 14.04准备的,不知道是不是这个问题...... 我将感激任何帮助,谢谢

c gcc compiler-errors ubuntu-14.04 ubuntu-16.04
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.