当前位置:  技术问答>linux和unix

linux系统 anjuta gtk+工程静态编译

    来源: 互联网  发布时间:2017-01-02

    本文导语:  本帖最后由 songqier 于 2011-08-19 11:22:59 编辑 我在anjuta上用gtk+2.0写了一个软件,考虑到软件的移植问题,在没有安装gtk+的linux系统上也能运行,所以尝试静态编译。首先我将gtk+2.0静态编译,并将系统的相关环境变量做...

本帖最后由 songqier 于 2011-08-19 11:22:59 编辑
我在anjuta上用gtk+2.0写了一个软件,考虑到软件的移植问题,在没有安装gtk+的linux系统上也能运行,所以尝试静态编译。首先我将gtk+2.0静态编译,并将系统的相关环境变量做了修改,如下
root@song-ubuntu:/opt# export CPPFLAGS="-I/opt/gtk/include"
root@song-ubuntu:/opt# export LDFLAGS="-L/opt/gtk/lib"
root@song-ubuntu:/opt# export PKG_CONFIG_PATH="/opt/gtk/lib/pkgconfig"
root@song-ubuntu:/opt# export LD_LIBRARY_PATH="/opt/gtk/lib"
root@song-ubuntu:/opt# export PATH="/opt/gtk/bin:$PATH"
上面的路径为我静态编译gtk+的生成路径。

然后就在这个Terminal中开始静态编译我的工程,因为anjuta采用自动生成makefile,所以先
./configure --enable-maintainer-mode 'CFLAGS=-g -O0' 'CXXFLAGS=-g -O0' 'JFLAGS=-g -O0' 'FFLAGS=-g -O0' --enable-shared=no --enable-static=yes 
然后make,但是生成的可执行文件的大小仍和原来动态编译时的大小一样大。查看make的过程,发现链接的时候全是链接的.so动态库,而没有链接静态库.a(我的系统上,每一个.so都有一个相应的相同路径的.a存在)。
make过程的链接部分显示为:
libtool: link: gcc -g -g -O0 -Wl,--export-dynamic -o filemon filemon-callbacks.o filemon-main.o filemon-filemonctl.o filemon-filterdialog.o filemon-gtkcontrol.o filemon-setdialog.o filemon-logtotxt.o -pthread  -L/opt/gtk/lib /opt/gtk/lib/libgtk-x11-2.0.so /opt/gtk/lib/libgdk-x11-2.0.so /usr/lib/libatk-1.0.so /usr/lib/libpangoft2-1.0.so /usr/lib/libpangocairo-1.0.so -lXext -lXrender -lXinerama -lXrandr -lXcursor -lXcomposite -lXdamage -lgdk_pixbuf-2.0 -lm /usr/lib/libgio-2.0.so -lXfixes /usr/lib/libcairo.so -lX11 -lpng12 /usr/lib/libpango-1.0.so /usr/lib/libfreetype.so -lz -lfontconfig /usr/lib/libgobject-2.0.so /usr/lib/libgmodule-2.0.so /usr/lib/libgthread-2.0.so -lrt /usr/lib/libglib-2.0.so -pthread -Wl,-rpath -Wl,/opt/gtk/lib -Wl,-rpath -Wl,/opt/gtk/lib


另外anjuta提供的configure的help如下:
Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/filemon]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

Program names:
  --program-prefix=PREFIX            prepend PREFIX to installed program names
  --program-suffix=SUFFIX            append SUFFIX to installed program names
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --enable-maintainer-mode  enable make rules and dependencies not useful
  (and sometimes confusing) to the casual installer
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --disable-nls           do not use Native Language Support
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-static[=PKGS]  build static libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L if you have libraries in a
              nonstandard directory 
  LIBS        libraries to pass to the linker, e.g. -l
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I if
              you have headers in a nonstandard directory 
  CPP         C preprocessor
  PKG_CONFIG  path to pkg-config utility
  PKG_CONFIG_PATH
              directories to add to pkg-config's search path
  PKG_CONFIG_LIBDIR
              path overriding pkg-config's built-in search path
  FILEMON_CFLAGS
              C compiler flags for FILEMON, overriding pkg-config
  FILEMON_LIBS
              linker flags for FILEMON, overriding pkg-config



各位大神大侠们,帮忙看看这是神马缘故。难道是gtk程序不能静态编译?这可了得,每次用gtk写个东西出来,移植到其他PC上的时候都要背个gtk库?这也太麻烦了

|
GTK不是不能静态链接
而是他的许可授权问题
GTK+是LGPL授权协议的
意味着你可以随意动态链接,但如果静态链接就得公开全部源代码

|
肯定不对啊
静态链接怎么会有-Wl,--export-dynamic 这种导出

lz想把gtk静态链接干啥啊,Linux下不都自带gtk库么

windows下才可能考虑把它静态链接

|
gkt通常不提供静态编译库,依赖的东西太多。

你一般很难找一台没安装gtk的linux机器,除非是不带图形界面的服务器。

|
一个危险的办法是把系统的gtk卸载了。。

印象中Makefile工程对库的寻找好像是有一个顺序的,其实大部分软件都不是通过静态编译实现的,一般是独立放一个文件夹,里边放上必要的动态链接库

    
 
 

您可能感兴趣的文章:

  • linux中静态链接库调用了另一个静态链接库
  • linux 生成静态库的时候怎么连接别的静态库
  • 请问在LINUX下怎么设置静态IP?我在虚拟机中不能设置静态IP怎么办?
  • Linux 动态库,静态库的一些疑惑
  • linux 静态库 makefile 相关问题
  • 送分.......linux下动态库和静态库的后缀名是什么呢?
  • 请问unix/linux下动态连接库和静态连接库有什么区别?
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • linux中,动态库中的函数如何调用静态库中的函数
  • LINUX下的静态库编译链接问题
  • 动态库与静态库在linux与windows下的调用??
  • window下能否调用linux的静态库(a文件)?
  • linux添加静态路由
  • 如何查看Linux静态加载了哪些内核
  • Linux下的.a静态库
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • linux 编译的时候,如何与.a静态库做链接生成.elf文件?
  • Linux下,如何实现多个静态库的链接?
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 在linux下用gcc编译时能不能实现“选择”的静态连接呢?
  • linux/centos源码安装nginx编译配置选项参数介绍
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • linux 64位编译出错。linux 32位可以编译过。
  • 关于在linux交叉编译powerpc-e300c3-linux-gcc的编译问题
  • linux下有没有能编译出16bit代码的C语言编译器?
  • 现要在一台Pentium100上安装LINUX操作系统,能不能不选用别的品牌的LINUX,而直接用内核编译,然后再加上编译器和SHELL等等其它东西?如
  • linux下可以编译c但是如何编译c++
  • arm-linux-gcc交叉编译出错,但gcc编译没错,什么原因呢???
  • 谁编译过PLX9054 Linux的驱动程序,我给100分教我编译和安装??
  • 何处有 Linux 内核编译配置详细的中文介绍? 我在重新配置编译时老是出错:-(
  • 想问一下,编译LINUX内核时,是否可以只编译其中的一个模块?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下如何安装anjuta1.2.2 ?
  • 谁多linux下的anjuta这个工具比较熟悉的?
  • 运行出错Syntax error: "(" unexpected linux系统 开发工具anjuta
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • 现要在一台Pentium100上安装LINUX操作系统,能不能不选用别的品牌的LINUX,而直接用内核编译,然后再加上编译器和SHELL等等其它东西?如 iis7站长之家
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3