linux/android编译常见问题

1.gcc可以用来编译.c源文件,也可以用来编译c++源代码。

(1)当gcc检测到.c文件时会按照c语言的语法进行编译,当检测到是.cpp时,就会按照c++语法进行编译;

(2)gcc只能编译cpp文件,但是在链接时,需要链接对应的libstdc++库才能够链接成功,当然这句话并不是绝对的,

因为链接是否成功主要看代码中的symbol是否都能够找到,如果C++文件中并没有调用到libstdc++中的内容,

那么即使不链接libstdc++也是可以直接链接成功的。

2.g++既可以用来编译.c文件,也可以用来编译c++文件。

(1)C++是C的超集,那么也就是说C代码同样可以支持,所以g++编译C代码完全不是问题。

(2)g++编译C++代码,g++在链接时是会自动链接对应libstdc++库的,不用我们显式加入-lstdc++编译选项了

3.有了上面的知识,我们就可以知道C和C++混编是一件很容易的事情了

gcc -c test1.c

gcc -c test2.cpp

gcc test1.o test2.o -o test -lstdc++

4.gcc编译静态库

gcc –c test1.c test2.c 生成.o目标文件

ar rcv libtest.a test1.o test2.o 将目标文件打包成库

5. gcc编译动态库

gcc -c fPIC test1.c test2.c 编译生成位置独立代码(-fPIC)

gcc -shared test1.o test2.o -o libtest.so 将.o文件打包成.so库

通常使用一条语句完成动态库编译:

gcc -fPIC -shared -o libtest.so test1.c test2.c

6. android编译静态库

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=libtest

LOCAL_SRC_FILES := test1.c test2.c

LOCAL_MODULE_TAGS := optional

include $(BUILD_STATIC_LIBRARY)

7. android编译动态库

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=libtest

LOCAL_SRC_FILES := test1.c test2.c

LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值