zoukankan      html  css  js  c++  java
  • gcc链接g++编译生成的静态库和动态库的makefile示例

    使用c++开发程序或者库时,将库提供给其他人使用。

    然而使用者是使用c开发的程序,链接g++编译生成的库时,于链接gcc生成的库,有所不同。

    首先是静态库,以链接g++编译生成的libmylib.a为例子

    mylib依赖于pthread,rt,math库,链接时必须放在mylib之后。

    同时-Wl,--no-as-needed -ldl添加在末尾是必须的。

    arm和x86有些不同,就是arm的gcc不会自动链接数学库math,需要手动添加链接。

     1 CC=arm-linux-gnueabihf-gcc -std=c99
     2 CCLDFLAGS= -L. -lmylib -lstdc++ -pthread -lrt -lm -Wl,--no-as-needed -ldl
     3 #CC=gcc -m32 -std=c99
     4 #CCLDFLAGS=-L. -lmylib -lstdc++ -pthread -lrt -Wl,--no-as-needed -ldl
     5 
     6 all:test
     7 
     8 test.o:test.c
     9     $(CC) -I../inc/ test.c -c -o test.o
    10 
    11 test:test.o libmylib.a
    12     $(CC) test.o -o test $(CCLDFLAGS)
    13 
    14 .PHONY: clean
    15 
    16 clean:
    17     -rm test test.o -f

    gcc链接g++生成的动态库示例:

    libmylib.so库,使用g++编译时,静态链接了stdc++库(-static-libstdc++)。

     1 CC=gcc -m32 -std=c99
     2 #CC=arm-linux-gnueabihf-gcc -std=c99
     3 CCLDFLAGS=-lstdc++ -L. -lmylib
     4 
     5 Root:root
     6 
     7 root.o:test.c
     8     $(CC) -I../inc/ test.c -c -o root.o
     9     
    10 root:root.o libmylib.so
    11     $(CC) root.o -o root $(CCLDFLAGS)
    12 
    13 
    14 .PHONY: clean
    15 
    16 clean:
    17     -rm root *.o
  • 相关阅读:
    rabbitmq集群几个比较好的文章
    rabbitmq集群步骤
    rabbitmq安装
    查找出系统中大于50k 且小于100k 的文件并删除。
    现将文件a.txt 中的所有abc 替换成def
    统计/var/log/下有多少文件
    压缩解压目录结构不能改变
    chkconfig命令
    linux运维必须掌握
    三剑客
  • 原文地址:https://www.cnblogs.com/jojodru/p/3992463.html
Copyright © 2011-2022 走看看