g++ 未定义对 libscrypt_scrypt 的引用(链接器参数化不是问题?)
g++ undefined reference to libscrypt_scrypt (linker parameterization not the issue?)
这是我的包括:
#include <iostream>
#include <string>
#include <cstring>
#include <stdio.h> //for snprintf
#include <libscrypt.h>
#include <sqlite3.h>
#include "generator.h" //has no dependencies
这是我的 g++ 4.2.1 命令,有编译错误:
# g++ -I/usr/local/include -L /usr/local/lib test.cpp generator.cpp -o test -lscrypt -lsqlite3
/tmp//cctxmw4C.o: In function `insertUser()':
test.cpp:(.text+0x607): undefined reference to `libscrypt_salt_gen(unsigned char*, unsigned long)'
test.cpp:(.text+0x6c3): undefined reference to `libscrypt_scrypt(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long long, unsigned int, unsigned int, unsigned char*, unsigned long)'
collect2: ld returned 1 exit status
类似的 C 代码可以用 GCC 编译得很好。 我认为参数的顺序不是问题 -- 我尝试了多种变体,包括移动 -I、-L 和两个 -l 标志。 scrypt 和 sqlite3 都是 C 库,尽管头文件和共享库分别位于 -I 和 -L 中,但 sqlite3 不会抛出任何错误。
在此处查看解决方案。
Using C Libraries for C++ Programs
extern "C"{
void c_function_prototype();
}
或
extern "C" void c_function_prototype();
If you have it see "The C++ Programming Language (Stoustrup) 4th Edition" p429
这是我的包括:
#include <iostream>
#include <string>
#include <cstring>
#include <stdio.h> //for snprintf
#include <libscrypt.h>
#include <sqlite3.h>
#include "generator.h" //has no dependencies
这是我的 g++ 4.2.1 命令,有编译错误:
# g++ -I/usr/local/include -L /usr/local/lib test.cpp generator.cpp -o test -lscrypt -lsqlite3
/tmp//cctxmw4C.o: In function `insertUser()':
test.cpp:(.text+0x607): undefined reference to `libscrypt_salt_gen(unsigned char*, unsigned long)'
test.cpp:(.text+0x6c3): undefined reference to `libscrypt_scrypt(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long long, unsigned int, unsigned int, unsigned char*, unsigned long)'
collect2: ld returned 1 exit status
类似的 C 代码可以用 GCC 编译得很好。 我认为参数的顺序不是问题 -- 我尝试了多种变体,包括移动 -I、-L 和两个 -l 标志。 scrypt 和 sqlite3 都是 C 库,尽管头文件和共享库分别位于 -I 和 -L 中,但 sqlite3 不会抛出任何错误。
在此处查看解决方案。
Using C Libraries for C++ Programs
extern "C"{ void c_function_prototype(); }
或
extern "C" void c_function_prototype();
If you have it see "The C++ Programming Language (Stoustrup) 4th Edition" p429