gcc 4.4 和 gcc 4.6 之间的编译有何区别?

gcc 4.4 和 gcc 4.6 之间的编译有何区别?

我刚刚从使用 gcc 4.4.6 的 RH (CentOS 6) 迁移到使用 gcc 4.6.3 的 Ubuntu 12。我有一个引用第三方库的程序。我已成功在 Ubuntu 机器上构建并安装了该库。运行时,updatedblocate libXXX.so得到了完全相同的结果。我以相同的方式查找头文件,也得到了完全相同的结果。

我有一个来自 CentOS 盒子的小型测试程序。它由一个*.c文件和一个用于构建和运行它的 bash 脚本组成。一切都非常简单。脚本如下所示:

#!/bin/bash

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

exit 0

我已经LD_LIBRARY_PATH设置了(在 CentOS 和 Ubuntu 机器上)头文件和所在的目录*.so。我已检查了两遍、三遍、四遍,确保拼写和大小写正确。

然而,当我在 Ubuntu 机器上编译时,undefined reference to '<function name>'测试程序中的每个函数调用都会出错。更奇怪的是,它们定义的类型并没有产生错误。当我#include在测试文件中注释掉时,编译器会为这些类型生成错误。

这是一个非常简单的设置,几乎没有可能失败的地方。我肯定我做了一些愚蠢的事情,但我看不出这是怎么回事。为了完整起见,我将发布相关部分。

源文件:

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

// bare bones test program

定位结果:

[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

环境变量:

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

当我在 Ubuntu 上编译时,得到以下结果:

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

看起来编译器不知道 在哪里*.so,但我在 中找到了它LD_LIBRARY_PATH。哎呀,我甚至添加了-L/usr2/uei/DAQLib -lpowerdnagcc 选项也无济于事。

编辑:也许应该将其移至 Linux 站点?
编辑:更新标题以更好地反映问题。

答案1

嗯...我把移到*.c库之前,编译成功了。我不知道顺序很重要。想想吧...

原来的: gcc -W -I/usr2/uei/DAQLib -L/usr2/uei/DAQLib -lpowerdna *.c

当前的: gcc -W *.c -I/usr2/uei/DAQLib -L/usr2/uei/DAQLib -lpowerdna

这就是生活。

相关内容