当前位置: 技术问答>linux和unix
linux 下,如何生成一个.o文件,该文件还调用一个.o文件或.a文件,请问该怎么写命令呢?
来源: 互联网 发布时间:2016-06-07
本文导语: 如题。。 我g++ -c -I//home//user2//proj//include// pinganback.c -o pinganback.o 下面为出错的: pinganback.c:223: error: elements of array 'dstbackcode dsts [100]' have incomplete type pinganback.c:223: error: storage size of 'dsts' isn't kno...
如题。。
我g++ -c -I//home//user2//proj//include// pinganback.c -o pinganback.o
下面为出错的:
pinganback.c:223: error: elements of array 'dstbackcode dsts [100]' have incomplete type
pinganback.c:223: error: storage size of 'dsts' isn't known
pinganback.c:287: error: 'SLECTBG' was not declared in this scope
原因就是我没有应用,读取配置文件的.o文件,请大侠帮帮忙,该怎么书写
我g++ -c -I//home//user2//proj//include// pinganback.c -o pinganback.o
下面为出错的:
pinganback.c:223: error: elements of array 'dstbackcode dsts [100]' have incomplete type
pinganback.c:223: error: storage size of 'dsts' isn't known
pinganback.c:287: error: 'SLECTBG' was not declared in this scope
原因就是我没有应用,读取配置文件的.o文件,请大侠帮帮忙,该怎么书写
|
是啊 單獨編譯成.o 然后可以調用.o文件啊。
main: main.o AT_hander.o
g++ -o main main.o AT_hander.o
main.o: main.c AT_hander.h receive_back.h
g++ -c main.c
AT_hander.o: AT_hander.cpp AT_hander.h
g++ -c AT_hander.cpp
clean
rm *.o
我才學不久,這是我的makefile文件。 看看對你有幫助沒有
main: main.o AT_hander.o
g++ -o main main.o AT_hander.o
main.o: main.c AT_hander.h receive_back.h
g++ -c main.c
AT_hander.o: AT_hander.cpp AT_hander.h
g++ -c AT_hander.cpp
clean
rm *.o
我才學不久,這是我的makefile文件。 看看對你有幫助沒有
|
# g++ -c -o pinganback.o pinganback.c
試試看,鏈結的步驟不是在編譯的步驟完成的,所以不用管對其餘.o和.a的調用
試試看,鏈結的步驟不是在編譯的步驟完成的,所以不用管對其餘.o和.a的調用
|
首先由.c编译成.o只要-c选项即可.(表示经过预编译,编译,汇编处理,不经过连接)
[/home/ucsrc/fish] cat sub.c
int sub(int i,int j)
{
return i-j;
}
[/home/ucsrc/fish] ls
add.c main.c sub.c
[/home/ucsrc/fish] cc -c sub.c
[/home/ucsrc/fish] ls
add.c main.c sub.c sub.o
再生成静态库.实际上由多个.o文件打包而成的.
[/home/ucsrc/fish] ar r libsub.a sub.o
ar: creating libsub.a
[/home/ucsrc/fish] ls
add.c libsub.a main.c sub.c sub.o
[/home/ucsrc/fish]
现在由main.c调用.o文件里面的函数.
[/home/ucsrc/fish] cat main.c
#include
int main()
{
printf("%dn",sub(10,20));
return 0;
}
[/home/ucsrc/fish] cc -o main main.c libsub.a
[/home/ucsrc/fish] ./main
-10
[/home/ucsrc/fish]
如果按楼主所言,是.o中调用另外一个.o只要把main.c编译成.o即可,不过这样程序的独立性不够强.
至于makefile,大可不必.就几个指令即可实现了.
[/home/ucsrc/fish] cat sub.c
int sub(int i,int j)
{
return i-j;
}
[/home/ucsrc/fish] ls
add.c main.c sub.c
[/home/ucsrc/fish] cc -c sub.c
[/home/ucsrc/fish] ls
add.c main.c sub.c sub.o
再生成静态库.实际上由多个.o文件打包而成的.
[/home/ucsrc/fish] ar r libsub.a sub.o
ar: creating libsub.a
[/home/ucsrc/fish] ls
add.c libsub.a main.c sub.c sub.o
[/home/ucsrc/fish]
现在由main.c调用.o文件里面的函数.
[/home/ucsrc/fish] cat main.c
#include
int main()
{
printf("%dn",sub(10,20));
return 0;
}
[/home/ucsrc/fish] cc -o main main.c libsub.a
[/home/ucsrc/fish] ./main
-10
[/home/ucsrc/fish]
如果按楼主所言,是.o中调用另外一个.o只要把main.c编译成.o即可,不过这样程序的独立性不够强.
至于makefile,大可不必.就几个指令即可实现了.
|
怎么不用makefile呢?