我刚刚从使用 gcc 4.4.6 的 RH (CentOS 6) 迁移到使用 gcc 4.6.3 的 Ubuntu 12。我有一个引用第三方库的程序。我已成功在 Ubuntu 机器上构建并安装了该库。运行时,updatedb
我locate 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 -lpowerdna
gcc 选项也无济于事。
编辑:也许应该将其移至 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
这就是生活。