小编And*_*ndy的帖子

在GCC中链接libssl和libcrypto

我正在尝试使用OpenSSL的EVP接口进行一些加密.我很确定我的代码是正确的,但我似乎无法编译.我正在使用GCC,并且安装了libssl-dev的Ubuntu 32位精确版和最新版本.

该项目目前包含一个文件program.c.

#include <openssl/evp.h>
...
i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1() ... );
...
EVP_CIPHER_CTX_init(e_ctx);
Run Code Online (Sandbox Code Playgroud)

以及其他各种电话.

这是我如何调用gcc:

gcc -Wall -g -lssl -lcrypto -o program program.c
Run Code Online (Sandbox Code Playgroud)

然后我得到这样的输出

/home/andy/program/program.c:31: undefined reference to `EVP_sha1'
/home/andy/program/program.c:31: undefined reference to `EVP_aes_256_cbc'
/home/andy/program/program.c:31: undefined reference to `EVP_BytesToKey'
/home/andy/program/program.c:44: undefined reference to `EVP_CIPHER_CTX_init'
Run Code Online (Sandbox Code Playgroud)

所以包含显然在起作用:

andy@ProgStation2:/usr/include$ find . | grep evp.h
./openssl/evp.h
Run Code Online (Sandbox Code Playgroud)

这是输出locate libcrypto.我最好的猜测是,这是一个愚蠢的位置,这就是为什么我的链接失败,所以我-L/usr/lib/i386-linux-gnu之前尝试过-lcrypto没有运气.

/lib/i386-linux-gnu/libcrypto.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

我有点难过.如果有人想让我觉得自己像个傻瓜,我会非常兴奋地弄清楚我做错了什么!

c linker gcc openssl libcrypto

10
推荐指数
1
解决办法
2万
查看次数

使用stdlib的qsort()对字符串数组进行排序

一些前言:我是一名计算机工程专业的学生,​​经过3个学期的Java(直到数据结构),在C学习第一堂课.这个问题与家庭作业有关,但是为我解决了一些步骤.

我有一个输入文件,我读入内存,它存储在char [9] [500].我读入最多500个最大长度为8的字符串.我试图使用stdlib内置的qsort()函数对这个数组进行排序,并且有一些内存错误.

重要的代码片段:

char data[4][500][60];
char debug[500][9];
size_t count = 0;

/* initialize file, open for reading */
FILE* pUserlog;
pUserlog = fopen("userlog","r");

while(!feof(pUserlog))
{
    fscanf(pUserlog, "%9s %8s %16s",debug[count], data[1][count], data[2][count]);
    fgets(data[3][count], 60, pUserlog);
    count++;
}
Run Code Online (Sandbox Code Playgroud)

此部分将数据读入阵列.这部分感兴趣的数组是"debug".这是上面指定的数组.这是我的qsort比较函数:

int compare(const void* a, const void* b)
{
    const char **ia = (const char **)a;
    const char **ib = (const char **)b;
    puts("I'm in compare!");
    return strncmp(*ia, *ib,8);
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试调用qsort:

size_t debug_len = sizeof(debug)/sizeof(char*);
printf("debug len: %d, count: %d, sizeof(char*): %d\n",debug_len,count,sizeof(char*)); …
Run Code Online (Sandbox Code Playgroud)

c arrays string qsort segmentation-fault

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×2

arrays ×1

gcc ×1

libcrypto ×1

linker ×1

openssl ×1

qsort ×1

segmentation-fault ×1

string ×1