Diferenças na compilação entre o gcc 4.4 e o gcc 4.6?

2

Acabei de me mudar do RH (CentOS 6) com o gcc 4.4.6 para o Ubuntu 12 com o gcc 4.6.3. Eu tenho um programa que faz referência a uma biblioteca de terceiros. BBesBes Mulher MulherB32B32B32B32BBBBBBBBBB32 MulherBBB32 MulherBB32 MulherBBBBBes32B32BBes32B32B32B32B32B32B32BesBBBesBBBBes Quando executo updatedb e locate libXXX.so , obtenho os mesmos resultados exatos. Eu procuro o arquivo de cabeçalho da mesma maneira e também obtenho os mesmos resultados exatos.

Eu tenho um pequeno programa de teste que veio da caixa do CentOS. Ele consiste em um arquivo *.c e um script bash para criar e executar. Tudo é muito simples. O script é assim:

#!/bin/bash

rm -f a.out
gcc -W -lpowerdna *.c

exit 0

Eu tenho LD_LIBRARY_PATH set (nas caixas CentOS e Ubuntu) no diretório onde o arquivo de cabeçalho e *.so residem. Eu tenho duplo, triplo e quádruplo verificados que a ortografia e a capitalização estão corretas.

No entanto, quando eu compilo na máquina Ubuntu, recebo o erro undefined reference to '<function name>' para cada chamada de função no programa de teste. Es MulherBBBBB32Beses MulherBeses Mulher32 MulherBBBBBesesesesBesB32BBBB32B32Bes MulherBBB32Beseses MulherBeseses MulherB32eses MulherBBeses MulherB32Beseseses Quando eu comento o #include no meu arquivo de teste, o compilador gera erros para os tipos.

Esta é uma configuração muito simples, com poucos pontos de possíveis falhas. Tenho certeza de que estou fazendo algo estúpido, mas pela minha vida não vejo isso. Para completar, vou postar as partes pertinentes.

Arquivo de origem:

#include<stdio.h>
#include<signal.h>
#include "PDNA.h"

// bare bones test program

Localizar resultados:

[brian@localhost dmap403]$ locate PDNA.h  
/usr2/uei/DAQLib/PDNA.h

[brian@localhost dmap403]$ locate libpowerdna  
/usr2/uei/DAQLib/libpowerdna.so  
/usr2/uei/DAQLib/libpowerdna.so.4  
/usr2/uei/DAQLib/libpowerdna.so.4.4.0

Variável de ambiente:

[brian@localhost dmap403]$ env | grep LD_
LD_LIBRARY_PATH=:/usr2/uei/DAQLib

Quando eu compilo no Ubuntu, obtenho estes resultados:

/tmp/ccJAa183.o: In function 'main':  
dmap403.c:(.text+0x6c): undefined reference to 'function name'  
collect2: ld returned 1 exit status

Parece que o compilador não sabe onde o *.so é, mas eu o tenho no LD_LIBRARY_PATH . Poxa, até adicionei -L/usr2/uei/DAQLib -lpowerdna às opções do gcc sem sucesso.

EDIT : Talvez isso deva ser movido para o site Linux?
EDIT : Título atualizado para refletir melhor a questão.

    
por pennyrave 17.10.2012 / 19:51

1 resposta

1

Hmmm ... eu movi o *.c antes das bibliotecas e ele compilou bem. Eu não sabia que a ordem importava. Vá descobrir ...

Original: gcc -W -I/usr2/uei/DAQLib -L/usr2/uei/DAQLib -lpowerdna *.c

Atual: gcc -W *.c -I/usr2/uei/DAQLib -L/usr2/uei/DAQLib -lpowerdna

C'est la vie.

    
por pennyrave 18.10.2012 / 14:08