OpenABE C++库编译报错:未定义引用问题求助
问题分析与解决方法
你的编译方式确实不正确——直接运行g++ test.cpp只完成了**编译(Compile)步骤(把源代码转换成目标文件),但没有执行链接(Link)**步骤:链接器需要找到OpenABE库中那些函数的具体实现(比如InitializeOpenABE()、OpenABECryptoContext的构造函数等),而你没告诉g++要链接OpenABE的库,所以才会出现一堆"undefined reference"错误。
正确的编译命令
根据OpenABE的安装路径,分两种情况:
情况1:OpenABE安装到系统默认路径(如/usr/local/lib、/usr/local/include)
直接用以下命令编译,指定要链接的OpenABE库和它依赖的OpenSSL库:
g++ test.cpp -o test -lopenabe -lcrypto
-lopenabe:告诉链接器要链接OpenABE的库文件-lcrypto:OpenABE依赖OpenSSL,所以需要同时链接这个库-o test:指定生成的可执行文件名为test
情况2:OpenABE安装在自定义路径(比如你把它安装到了~/openabe/install目录)
需要手动指定头文件路径和库文件路径,同时添加运行时库搜索路径:
g++ test.cpp -o test \ -I~/openabe/install/include \ # 指定OpenABE头文件所在目录 -L~/openabe/install/lib \ # 指定OpenABE库文件所在目录 -lopenabe -lcrypto \ -Wl,-rpath=~/openabe/install/lib # 让程序运行时能找到动态库
验证方法
编译成功后,运行生成的可执行文件:
./test
如果一切正常,你会看到输出:Message: plaintext,同时断言不会触发错误。
额外说明
你的test.cpp代码本身没有问题,完全符合OpenABE的API使用规范,问题只出在编译链接的参数上。另外,如果你的系统中同时安装了多个版本的OpenABE,要确保-L指定的是你实际使用的那个版本的库路径。
内容的提问来源于stack exchange,提问作者Vivek Ghosh
相关产品推荐
相关产品推荐

