zoukankan      html  css  js  c++  java
  • GCC 链接顺序问题

    参考:http://www.liaoqiqi.com/post/69

    我们在编译boost日志库时需要链接较多的库例如 -lboost_log -lboost_log_setup -lboost_system -lboost_thread
    如果链接顺序有问题,就会造成链接失败
    但是日常开发过程中,维护链接顺序,甚至链接库之间循环依赖会加大维护难度,会影响开发效率

    还好GCC提供了链接参数
    例如:

    gcc -o print_log print_log.cc -Xlinker "-(" -lboost_log -lboost_log_setup  -lboost_system -lboost_thread -Xlinker "-)"
    

    这样即使链接顺序不对,也不怕了

    另外gcc源文件的时候最好放在前面

    g++ -g -std=c++11 -o coro -I ~/boost/output/include -L~/boost/output/lib -Xlinker "-(" -lpthread -lboost_atomic -lboost_chrono -lboost_container -lboost_context -lboost_contract -lboost_coroutine -lboost_date_time -lboost_exception -lboost_fiber -lboost_filesystem -lboost_graph -lboost_iostreams -lboost_locale -lboost_log -lboost_log_setup -lboost_math_c99 -lboost_math_c99f -lboost_math_c99l -lboost_math_tr1 -lboost_math_tr1f -lboost_math_tr1l -lboost_program_options -lboost_python27 -lboost_random -lboost_regex -lboost_serialization -lboost_stacktrace_addr2line -lboost_stacktrace_basic -lboost_stacktrace_noop -lboost_system -lboost_thread -lboost_timer -lboost_type_erasure -lboost_wave -lboost_wserialization  -Xlinker "-)" coro.cpp
    

    改成这样就好了:

    g++ -g -std=c++11 coro.cpp -o coro -I ~/boost/output/include -L~/boost/output/lib -Xlinker "-(" -lpthread -lboost_atomic -lboost_chrono -lboost_container -lboost_context -lboost_contract -lboost_coroutine -lboost_date_time -lboost_exception -lboost_fiber -lboost_filesystem -lboost_graph -lboost_iostreams -lboost_locale -lboost_log -lboost_log_setup -lboost_math_c99 -lboost_math_c99f -lboost_math_c99l -lboost_math_tr1 -lboost_math_tr1f -lboost_math_tr1l -lboost_program_options -lboost_python27 -lboost_random -lboost_regex -lboost_serialization -lboost_stacktrace_addr2line -lboost_stacktrace_basic -lboost_stacktrace_noop -lboost_system -lboost_thread -lboost_timer -lboost_type_erasure -lboost_wave -lboost_wserialization  -Xlinker "-)" 
    

    除此之外 gcc 可以指定某个lib进行动态链接或静态链接:

    g++ test.cpp -I ~/opt/somelib/include -L ~/opt/somelib/lib -l:libsomelib.a
    

    特殊情况下可以把所有的lib都进行静态链接 一些库可以使用 LDFLAGS 进行指定 -static

    g++ test.cpp -static -lpthread
    

    也可以使用 link group

    -Wl,--start-group
    
  • 相关阅读:
    Java入门
    Java入门
    字符串常用方法(转载--https://www.cnblogs.com/ABook/p/5527341.html)
    SSM-8FastDfs搭建
    SSM7-nginx的反向代理和负载均衡
    SSM-6nginx Linux下的安装
    SSM-5zookeeper在LINUX上自启
    SSM4-Linux上jdk、tomcat、zookeeper------tar zxvf的安装
    SSM3-SVN的安装和搭建环境
    SSM2-搭建maven常见的错误以及解决方法
  • 原文地址:https://www.cnblogs.com/stdpain/p/13264313.html
Copyright © 2011-2022 走看看