我在文件 public static void main( String[] args )
{
FileInputStream fileInputStream=null;
File file = new File("C:\\testing.txt");
byte[] bFile = new byte[(int) file.length()];
try {
//convert file into array of bytes
fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
for (int i = 0; i < bFile.length; i++) {
System.out.print((char)bFile[i]);
}
System.out.println("Done");
}catch(Exception e){
e.printStackTrace();
}
}
中有以下代码。我试图生成一个RSA密钥对。
void TableView::mouseDoubleClickEvent ( QMouseEvent *event )
{
emit(doubleClick(this->indexAt(QPoint(event->pos().x(), event->pos().y()))));
event->accept();
}
我用
编译了这个rsatest.c
我收到以下错误。
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main(){
RSA *rsa = RSA_generate_key((const int) 1024,(const int) 3, 0, 0);
return 0;
}
我是否以错误的顺序链接库文件?我在windows(64位)上使用msys和mingw创建了libcrypto.a和libssl.a,并且我在同一系统上运行代码。
RSA_generate_key已在rsa.h中声明。它是否未在libcrypto.a中定义?
编辑:
我也试过了,
gcc -I../include/ -L . -lcrypto -lssl rsatest.c
我理解链接器将从左到右查找库中的定义。
但是,我在
中获得了对各种函数的新未定义引用 undefined reference to `RSA_generate_key'
我在线查找并在库gdi32和zlib中找到了缺少的符号。所以我添加了
gcc -I../include rsatest.c -L . -lcrypto -lssl
编译器没有抱怨缺少库,所以我认为它们存在于mingw中。而且,我得到了相同的输出。
我也使用了nm,发现rand_win.o和c_zlib.o中的符号确实未定义。
为什么链接器似乎无法在这些库中找到定义?
答案 0 :(得分:2)
更改gcc命令中的顺序。
gcc -I../include/ rsatest.c -L . -lcrypto -lssl
据我所知,链接器有一个未定义符号列表。当它处理libcrypto.a和libssl.a时,它在未定义的符号列表中没有任何内容,因此他只删除了库。然后在处理rsatest后,它的列表中有一些东西,但它不会在已处理的库中查找符号。