zoukankan      html  css  js  c++  java
  • gcc命令以及makefile文件

    (一)makefile里涉及到的gcc命令

    gcc -I./inc:指定头文件寻找目录

    将按照 ./inc --> /usr/include --> /usr/local/include的顺序寻找头文件

    gcc -L./lib:指定库文件的寻找目录

    将按照 ./lib --> /usr/lib --> /usr/local/include的顺序寻找库文件

    gcc -ltest

    将使用libtest.so动态链接库或libtest.a静态链接库,优先使用libtest.so

    gcc -static -ltest

    将强制使用libtest.a静态链接库

    编译生成动态链接库:

    gcc -o *.c -fPIC -c *.c    //-fPIC指明生成和地址无关的目标文件

    gcc -o libtest.so -shared *.o  //在连接过程中指定-shared,即生成共享形式的目标文件

    gcc -o target -L./lib  -ltest -Wl,-rpath=./lib   //-Wl,-rpath=./lib指定运行时的库文件路径

    生成静态库:

    gcc -o *.o -c *.c

    ar crs libtest.a *.o      //libtest.a可以看做是将.o文件进行了打包

    gcc -o target -L./lib -ltest

    (二)makefile文件

    1 只有一个或多个源文件

    CC=gcc
    CFLAGS=-Wall -std=gnu99
    
    TARGET=test
    SRCS=test.c
    OBJS=${SRCS:.c=.o}
    
    ${TARGET}:${OBJS}
            ${CC} -o $@ $^
    clean:
            rm -rf ${TARGET} ${OBJS}
    %.o:%.c
            ${CC} ${CFLAGS} -o $@ -c $<

    2 源文件在src下,头文件在inc下

    CC=gcc
    CFLAGS=-Wall -std=gnu99
    INC=-I./inc
    
    TARGET=test
    SRCS=./src/test.c ./src/test_add.c ./src/test_min.c
    OBJS=${SRCS:.c=.o}
    
    ${TARGET}:${OBJS}
            ${CC} -o $@ $^
            rm -rf ${OBJS}
    clean:
            rm -rf ${TARGET} ${OBJS}
    
    %.o:%.c
            ${CC} ${FLAGS} ${INC}  -o $@ -c $<

    3 链接阶段添加动态链接库

    CC=gcc
    CFLAGS=-Wall -std=gnu99
    
    TARGET=test
    SRCS=./src/test.c ./src/test_add.c
    OBJS=${SRCS:.c=.o}
    INC=-I./inc
    DLIBS=-lm
    
    ${TARGET}:${OBJS}
            ${CC} ${DLIBS} -o $@ $^
            rm -rf ${OBJS}
    
    clean:
            rm -rf ${OBJS} ${TARGET}
    
    %.o:%.c
            ${CC} ${FLAGS} ${INC} -o $@ -c $<

    4 编译动态链接库

    CC=gcc
    CFLAGS=-Wall -std=gnu99
    
    TARGET=libtest.so
    SRCS=./src/test.c ./src/test_add.c ./src/test_min.c
    OBJS=${SRCS:.c=.o}
    INC=-I./inc
    
    ${TARGET}:${OBJS}
            ${CC} ${CFLAGS} -shared -o $@ $^
            rm -rf ${OBJS}
    clean:
            rm -rf ${OBJS} ${TARGET}
    
    %.o:%.c
            ${CC} ${CFLAGS} ${INC} -o $@ -fPIC -c $<
  • 相关阅读:
    JAVA中SESSION和COOKIE的解释
    关于org.apache.catalina.session.StandardManager doLoad错误的解决
    MySQL 修改字段类型或长度
    JS倒计时 定时器
    设置tomcat内存
    Unable to resolve JRE: jdk1.6.0_01 (Standard VM)
    Error configuring application listener of class org.springframework.web.context.ContextLoader
    nested exception is java.lang.OutOfMemoryError: PermGen space
    导数据,整理数据思路总结
    mysql_mssql_access_2017年最新手机号段归属地数据库(17年4月更新)360569记录
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4398734.html
Copyright © 2011-2022 走看看