代码之家  ›  专栏  ›  技术社区  ›  AnlamK

涉及Glib2库的C程序编译问题?

  •  0
  • AnlamK  · 技术社区  · 12 年前

    我正在尝试编译 the following project 在远程服务器上。

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

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

    因此,我在“scode/gsl”和“scodeglib”文件夹下手动编译了gsl和gslib2。

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

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

    [dyuret@psgloginscode]$制造

    gcc-O3-D_GNU_SOURCE-墙-标准=c99-I-I/home-2/缩二脲/scode/gsl -I/home-2/缩二脲/缩二酮/油嘴滑舌/ pkg-config --cflags glib-2.0 服务提供商 pkg-config --libs glib-2.0 -lm-lgsl-lgslcblas-o代码

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

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

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

    任何帮助都将不胜感激。我已经在这个问题上花了一些时间,但我没能取得多大进展。

    2 回复  |  直到 12 年前
        1
  •  0
  •   unwind    12 年前

    声音 就好像你为了在非默认(即非系统)位置编译库所做的可能是错误的一样。

    对于使用autoconf的包(即具有 configure 源根目录中的脚本) --prefix 选项 ./configure 以设置要安装程序包的目标位置。

    对于构建共享库的包 make install 步骤,听起来好像你可能没有这么做。

    很抱歉说得很含糊,这些事情有点复杂。

        2
  •  0
  •   AnlamK    12 年前

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

    (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
    

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