gcc编译问题,直接编译可以生成out文件,但是用-c生成.o文件后用-o链接时出错

时间:2022-03-11 19:27:36
应为工作要用ncftp的库,但是编译一直不过,写了个小程序测试发现了下面的问题
#include <stdio.h>
//#include <sys/types.h>
//#include <sys/stat.h>
#include <ncftp.h>
int main(int argc, char *argv[])
{
        FTPLibraryInfo li;
        FTPConnectionInfo ci;
        int result;
        FILE *log;
        log = fopen("/tmp/ncftp.log","a+");
        FTPInitLibrary(&li);
        FTPInitConnectionInfo(&li,&ci,kDefaultFTPBufSize);
        printf("hello world!\n");
        return 0;
}

以上是测试程序代码

用g++  uploadfile1.cpp -I/usr/local/include  -lncftp -lStrn -lsio
没有问题,可以生成a.out文件。

但是用g++ -c -g  uploadfile1.cpp -I/usr/local/include生成.o文件
用g++ -lncftp -L/usr/local/lib uploadfile1.o -o upload提示下面这样的错误
uploadfile1.o: In function `main':
/ckk/New Folder/uploadfile1.cpp:12: undefined reference to `FTPInitLibrary'
/ckk/New Folder/uploadfile1.cpp:13: undefined reference to `FTPInitConnectionInfo'
collect2: ld 返回 1

已经搞了2天了,还是没有头绪,按照说直接能够生成说明静态库是没有问题的
但为什么分步编译就出现undefined reference to ?

麻烦谁能回答下?

5 个解决方案

#1


就是找不到定义,你把 ncftp 这个库的路径列出来,还有在这个库里面找找有不有那两个定义。

#2


库确定没有问题,路径也没有问题
因为用g++  uploadfile1.cpp -I/usr/local/include  -lncftp -lStrn -lsio
生成的a.out是可以运行的

#3


顺序不对吧,比较新的gcc,顺序不对就链接不了
g++ -o upload uploadfile1.o -lncftp -L/usr/local/lib  

这样试试

#4


为什么不用
g++  -c  uploadfile1.cpp -I/usr/local/include  -lncftp -lStrn -lsio -g 

#5


我也遇到了这个问题,将链接的语法改一下就可以了。
就像3楼一样。
ld -o $(TARGET) $(OBJ) ....

#1


就是找不到定义,你把 ncftp 这个库的路径列出来,还有在这个库里面找找有不有那两个定义。

#2


库确定没有问题,路径也没有问题
因为用g++  uploadfile1.cpp -I/usr/local/include  -lncftp -lStrn -lsio
生成的a.out是可以运行的

#3


顺序不对吧,比较新的gcc,顺序不对就链接不了
g++ -o upload uploadfile1.o -lncftp -L/usr/local/lib  

这样试试

#4


为什么不用
g++  -c  uploadfile1.cpp -I/usr/local/include  -lncftp -lStrn -lsio -g 

#5


我也遇到了这个问题,将链接的语法改一下就可以了。
就像3楼一样。
ld -o $(TARGET) $(OBJ) ....