Agora mesmo, comecei a ler o livro: Programação Avançada no Ambiente UNIX® . Eu queria tentar executar seu primeiro exemplo de código. Estou executando o Scientific Linux 6.4.
Eu baixei o código-fonte e, como ele diz no README, corri make
no arquivo descompactado.
Eu escrevi o primeiro programa (um ls
comando simulado )
#include "./include/apue.h"
#include <dirent.h>
int
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc!=2)
err_quit("usage: test directory_name");
if((dp=opendir(argv[1]))==NULL)
err_sys("Can't open %s", argv[1]);
while((dirp=readdir(dp))!=NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
return 0;
}
e coloque-o no arquivo descompactado. Como o livro tinha aconselhado Então eu corri: gcc myls.c
. Mas eu recebo este erro:
# gcc myls.c
/tmp/ccWTWS2I.o: In function `main':
test.c:(.text+0x20): undefined reference to `err_quit'
test.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status
Eu queria saber como posso resolver esse problema. Também quero executar um código que escrevo em qualquer diretório.
include
que possui o arquivo de cabeçalho apue.h
. Mas este é o único arquivo nesse diretório. Eu não entendo onde estão as definições de funções reais! Pensei que alguém estivesse familiarizado com a estrutura de arquivos de código-fonte deste livro aqui.
.h
arquivos incluem os protótipos para as funções. Suas implementações estão .so
ou .a
arquivos que precisam estar presentes na caixa. Estas são bibliotecas dinâmicas e estáticas que contêm as funções.
apue.h
?
err_{quit,sys}
vir?