#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是可以运行的
因为用g++ uploadfile1.cpp -I/usr/local/include -lncftp -lStrn -lsio
生成的a.out是可以运行的
#3
顺序不对吧,比较新的gcc,顺序不对就链接不了
g++ -o upload uploadfile1.o -lncftp -L/usr/local/lib
这样试试
g++ -o upload uploadfile1.o -lncftp -L/usr/local/lib
这样试试
#4
为什么不用
g++ -c uploadfile1.cpp -I/usr/local/include -lncftp -lStrn -lsio -g
g++ -c uploadfile1.cpp -I/usr/local/include -lncftp -lStrn -lsio -g
#5
我也遇到了这个问题,将链接的语法改一下就可以了。
就像3楼一样。
ld -o $(TARGET) $(OBJ) ....
就像3楼一样。
ld -o $(TARGET) $(OBJ) ....
#1
就是找不到定义,你把 ncftp 这个库的路径列出来,还有在这个库里面找找有不有那两个定义。
#2
库确定没有问题,路径也没有问题
因为用g++ uploadfile1.cpp -I/usr/local/include -lncftp -lStrn -lsio
生成的a.out是可以运行的
因为用g++ uploadfile1.cpp -I/usr/local/include -lncftp -lStrn -lsio
生成的a.out是可以运行的
#3
顺序不对吧,比较新的gcc,顺序不对就链接不了
g++ -o upload uploadfile1.o -lncftp -L/usr/local/lib
这样试试
g++ -o upload uploadfile1.o -lncftp -L/usr/local/lib
这样试试
#4
为什么不用
g++ -c uploadfile1.cpp -I/usr/local/include -lncftp -lStrn -lsio -g
g++ -c uploadfile1.cpp -I/usr/local/include -lncftp -lStrn -lsio -g
#5
我也遇到了这个问题,将链接的语法改一下就可以了。
就像3楼一样。
ld -o $(TARGET) $(OBJ) ....
就像3楼一样。
ld -o $(TARGET) $(OBJ) ....