我正在尝试在远程服务器上编译the following project。
我把git克隆到名为'scode'的文件夹中。
该项目需要glib2和gsl库。因为我正在尝试在远程服务器上编译,所以我没有sudo权限。所以我不能使用工具为我安装glib2和gsl。
结果,我在'scode / gsl'和'scode / glib'文件夹下手动编译了gsl和gslib2。
我必须修改Makefile并将这些目录的绝对路径添加为-I选项。
尽管如此,当我尝试编译最终的可执行文件时。我收到以下错误:
[dyuret @ psglogin scode] $ make
gcc -O3 -D_GNU_SOURCE -Wall -std = c99 -I。 -I / home-2 / dyuret / scode / gsl -I / home-2 / dyuret / scode / glib /
pkg-config --cflags glib-2.0
scode.o svec.opkg-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
我已经研究过这个问题了。这个link看起来很有用,但我不能完全解读作者所说的内容,因为我不熟悉编译器,libtools和编译流程。
非常感谢任何帮助。我已经花了一些时间在这个问题上,但我还没有取得多大进展。
答案 0 :(得分:0)
听起来好像你为了在非默认(即非系统)位置编译库所做的,可能是错误的。
对于使用autoconf的软件包(即源根目录中有configure
脚本),你应该使用./configure
选项make install
来设置你想要的目标位置包安装。
使用包构建共享库时,执行{{1}}步骤通常很重要,听起来好像你可能没有这样做。
对于含糊不清的抱歉,这些事情有点复杂。
答案 1 :(得分: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
在此之后,编译的代码没有其他问题。