0

我正在尝试在远程服务器上编译以下项目。

我已经将项目克隆到一个名为“scode”的文件夹中。

该项目需要 glib2 和 gsl 库。由于我试图在远程服务器上编译,所以我没有 sudo 权限。所以我不能使用工具来为我安装 glib2 和 gsl。

结果,我在“scode/gsl”和“scode/glib”文件夹下手动编译了gsl和gslib2。

我不得不修改 Makefile 并将这些目录的绝对路径添加为 -I 选项。

尽管如此,当我尝试编译最终的可执行文件时。我收到以下错误:

[dyuret@psglogin 代码]$ make

gcc -O3 -D_GNU_SOURCE -Wall -std=c99 -I。-I /home-2/dyuret/scode/gsl -I pkg-config --cflags glib-2.0/home-2/dyuret/scode/glib/scode.o svec.o pkg-config --libs glib-2.0-lm -lgsl -lgslcblas -o scode

//home-2/dyuret/scode/glib/glib/libglib-2.0.la:文件无法识别:文件格式无法识别

collect2: 错误: ld 返回 1 退出状态 make: * [scode] 错误 1

我已经对这个问题进行了一些研究。这个链接看起来内容丰富,但我无法完全理解作者在说什么,因为我对编译器、libtools 和一般的编译流程没有那么丰富的经验。

任何帮助将非常感激。我已经在这个问题上花了一些时间,但我没有取得太大进展。

4

2 回答 2

0

听起来您为了在非默认(即非系统)位置编译库所做的工作可能是错误的。

对于使用 autoconf 的包(即configure在源根目录中有一个脚本),您应该使用该--prefix选项来./configure设置您希望安装包的目标位置。

对于构建共享库的包,执行该make install步骤通常很重要,听起来好像您可能没有这样做。

抱歉含糊不清,这些事情有点复杂。

于 2013-08-23T13:40:07.023 回答
0

我小组中的某个人帮助我解决了这个问题。以下是他大致执行的步骤:

(1) 在 $HOME 目录下手动安装 glib 和附加库 - 即 $HOME/lib、$HOME/include。

(1.1) 我认为他是通过 './configure prefix=$HOME'、'make'、'make install' 做到的。

(2) 摆脱了 `pkg_config` 的使用,这导致了我最初概述的问题。以下是他的新 CLFAGS 和 LIBS 变量:

CFLAGS=-O3 -D_GNU_SOURCE -Wall -std=c99 -I. -I$$HOME/include -I$$HOME/include/glib-2.0 -I$$HOME/lib/glib-2.0/include
LIBS=-lglib-2.0 -lm -lgsl -lgslcblas -L$$HOME/lib -L/usr/local/cuda/lib64 -lcudart

在此之后,编译的代码没有其他问题。

于 2013-08-28T10:59:03.393 回答