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

静态链接与动态链接高手进

    来源: 互联网  发布时间:2015-12-13

    本文导语:  我用log4cplus的库,有静态库(liblog4cplus.a)也有动态库(liblog4cplus.so) 我的环境是: /home/yrq/test/log4/test$ ls  hello.cpp  liblog4cplus.so  /home/yrq/test/log4/test$ ls .. liblog4cplus.a t2  test 我的代码是:hello.cpp(这个是log4cplus...

我用log4cplus的库,有静态库(liblog4cplus.a)也有动态库(liblog4cplus.so)
我的环境是:
/home/yrq/test/log4/test$ ls 
hello.cpp  liblog4cplus.so 
/home/yrq/test/log4/test$ ls ..
liblog4cplus.a t2  test

我的代码是:hello.cpp(这个是log4cplus网站上的源代码)

#include 
#include 
#include 

using namespace log4cplus;

int main( int argc, char** argv)
{
    BasicConfigurator config;
    config.configure();

    Logger logger = Logger::getInstance("main");
    LOG4CPLUS_WARN(logger, "Hello, World!");
    return 0;
}


当我用静态库编译的时候不报错:
/home/yrq/test/log4/test$ g++ -g -c hello.cpp
/home/yrq/test/log4/test$ g++ -g  -o hello hello.o -L.. -llog4cplus

当运行的时候出现段错误。加上-Bstatic结果也是一样。
/home/yrq/test/log4/test$ hello
段错误
/home/yrq/test/log4/test$ gdb hello core.3505 
GNU gdb Red Hat Linux (6.1post-1.20040607.62rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1".

Core was generated by `hello'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libstdc++.so.6...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/tls/libm.so.6...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0  0x00000000 in ?? ()
(gdb) where
#0  0x00000000 in ?? ()
#1  0x08074b84 in log4cplus::thread::createPthreadKey () at threads.cxx:115
#2  0x08061608 in NDC (this=0x808f830) at ndc.cxx:89
#3  0x08061665 in log4cplus::getNDC () at ndc.cxx:56
#4  0x0805c1af in log4cplus::initializeLog4cplus () at global-init.cxx:52
#5  0x0807f015 in __do_global_ctors_aux ()
#6  0x0804a3d9 in _init ()
#7  0x0807ef7e in __libc_csu_init ()
#8  0x0070ede3 in __libc_start_main () from /lib/tls/libc.so.6
#9  0x0804ab7d in _start ()
(gdb) q


当用动态库编译也没错,运行也没错。
/home/yrq/test/log4/test$ hello
WARN - Hello, World!

|
用调试器调试,看代码运行到什么地方出错,这样好找一些,先要定位错误
然后再用strace这样的工具看一下系统调用
最后才去怀疑是否是编程器的BUG,换一种比如将G++换编译器试一下,成GCC,将低版本的GCC换成高版本的GCC,或者相反,或者换一台另外的LINUX发行版的机子试一下

    
 
 

您可能感兴趣的文章:

  • 如何在一个静态链接库中链接另一个静态链接库?
  • linux中静态链接库调用了另一个静态链接库
  • 静态库,动态库,静态链接和动态链接
  • 编译静态链接库,其中使用了其它链接库,该如何写makefile
  • .a文件的动态链接和静态链接问题
  • 动态库链接 变为 静态库链接问题
  • linux下静态库使用:"未使用链接器输入文件,因为链接尚未完成"
  • 急求静态库引用静态库,该如何编译链接!!!
  • makefile.am中生成.a静态库的同时,链接其他.a静态库或.la动态库的问题
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • 可执行文件比静态链接库小正常吗?
  • QT4.0 OpenSource版本开发Windows程序,如何进行静态链接?
  • linux 编译的时候,如何与.a静态库做链接生成.elf文件?
  • 静态库链接
  • 编译时如何区分动态链接和静态链接?
  • AIX 4.3下面如何静态链接GNU stdc++库到我的程序里面?
  • 怎么样编释成静态链接库?
  • 请问编译静态链接库的makefile该如何写?
  • LINUX下的静态库编译链接问题
  • linux动态链接库里全局变量和静态变量会导致动态库不可重入吗?
  • 请高手给讲解一下堆栈、堆、静态存储等概念
  • 高手请指教:如何将静态库*.a影射为动态库*.so?
  • 有关静态库*.a的调用问题,请高手指点,急急急!
  • 要求我做个静态类,高手给点提示和注意事项吧,谢谢了!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个基本概念问题:静态函数只能调用静态方法,类的成员函数也是静态的吗?
  • 如何 用一个静态库 生成 另一个静态库
  • 请教:(static)静态变量和静态方法是什么意思?
  • 有把两个静态库.a合成一个静态库的简单方法吗
  • linux 生成静态库的时候怎么连接别的静态库
  • 静态博客 静态blog
  • 静态库动态库同时存在时,如何指定使用静态库
  • C# 静态方法与非静态方法的区别分析
  • gcc的静态库.lib怎末在编译的时候连接。对了静态库是自己的???
  • PHP static局部静态变量和全局静态变量总结
  • c#静态方法和非静态方法详细介绍
  • 在静态上下文中不能引用非静态方法test(),天啊,为什么我的main()不能调用任何其它函数?
  • 静态函数,静态变量
  • java有无像vb那样的静态变量?java的staic是类的属性,那末,静态变量如何声明?
  • c++静态局部变量和静态函数示例
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • 关于C++静态成员函数访问非静态成员变量的问题
  • asp.net伪静态后真正的静态文件无法访问的解决方法
  • 请问在LINUX下怎么设置静态IP?我在虚拟机中不能设置静态IP怎么办?
  • 为什么非静态变量不能用在静态方法上?什么意思?


  • 站内导航:


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

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

    浙ICP备11055608号-3