1

我在 ubuntu 操作系统中使用 eclipse CDT。我有一个正在开发的 API(Intel-Aes NI)。我已经运行了 shell 文件(mk_lnx64_all.sh)来构建 API 并获取库(.a 文件)。生成的库文件位于文件夹:/path/to/Intel_AESNI_Sample_Library_v1.2/intel_aes_lib/lib/x64/。我需要运行一个名为 aessample.c 的源文件,该文件具有来自文件夹的 main() : /path/to/Intel_AESNI_Sample_Library_v1.2/intel_aes_lib/src/ 。我在 Eclipse 设置中将路径和库名称添加为 intel_aes64(不带 .a 扩展名)。但是当我构建项目时,它仍然给出错误:

 make all 
Building target: Intel
Invoking: GCC C Linker
gcc -L/home/xxx/Documents/Intel_AESNI_Sample_Library_v1.2/intel_aes_lib/lib/x64 -o "Intel"  ./src/aessample.o ./src/intel_aes.o   -lintel_aes64
/usr/bin/ld: cannot find -lintel_aes64
collect2: error: ld returned 1 exit status
make: *** [Intel] Error 1 

我也尝试使用终端执行以下命令:

gcc -I/home/xxx/Documents/Intel_AESNI_Sample_Library_v1.2/intel_aes_lib/include intel_aes.c -L/home/xxx/Documents/Intel_AESNI_Sample_Library_v1.2/intel_aes_lib/lib/x64 -lintel_aes64

甚至上面的命令也会给出错误:

/usr/bin/ld: cannot find -lintel_aes64
collect2: error: ld returned 1 exit status

而且我无法弄清楚如何从互联网上下载它并使用命令安装它: apt-get install xxx-dev 以获取安装在 /usr/local/lib 中的库。我在哪里做错了?请帮我。

4

2 回答 2

1

-lnamelibname.a(或其他库后缀,例如libname.dylib)的缩写。要使用不以 开头的库文件lib,只需指定它的路径,就像使用源文件或目标文件一样。(在这种情况下,您不需要-L任何一个,因为它指定了使用时要搜索的路径-l。)因此您可以使用以下命令:

gcc -I/home/xxx/Documents/Intel_AESNI_Sample_Library_v1.2/intel_aes_lib/include intel_aes.c /home/xxx/Documents/Intel_AESNI_Sample_Library_v1.2/intel_aes_lib/lib/x64/intel_aes64.a
于 2013-06-11T04:14:55.297 回答
0

我发现我必须

手动将 make/shell/executable 文件生成的文件从“intel_aes64.a”重命名为“libintel_aes64.a”

然后让它在 Eclipse 中工作,将其路径和库名称添加为“intel_aes64”(通常排除 lib-prefix 和 .a 扩展名)。由于编译器仅将以“lib”开头的文件视为库文件。

于 2013-06-12T16:08:17.677 回答