sql触发器调用外部程序_基于LLVM的外部程序调用

在写程序特别是集成程序的时候,经常要写代码去调用各种工具类可执行程序,在这过程中构造调用参数和执行结果判断都是比较麻烦的问题。今天我们介绍一种可以轻松解决这些问题的方法:基于LLVM的外部程序调用。

一、工程目录结构

d0f14d8aed3cc70cbbaacbfa013af604.png

二、示例代码
2.1 CMDemo2.cpp

1.#include

2.#include

3.#include

4.#include

5.#include

6.#include

7.

8.using namespace llvm;

9.

10.int main(int argc, char **argv){

11.

12. std::vector args;

13. args.push_back(" -ls");

14. std::string errorMsg;

15. if(sys::ExecuteAndWait("/bin/ls",args,None,{},0,0,&errorMsg)){

16. printf("Error:%s\n",errorMsg.c_str());

17. }else{

18. printf("ExecuteAndWait succeuss\n");

19. }

20. return 0;

21.}

2.2 CMakeLists.txt

1.cmake_minimum_required(VERSION 3.11.2) #cmake版本要求

2.

3.project(CMDemo2) #项目名称

4.

5.link_libraries(z)

6.link_libraries(curses)

7.link_libraries(pthread)

8.

9.set(CMAKE_CXX_STANDARD 11) #设置C++标准为C++11 LLVM 10 之后要用C++14

10.

11.set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #设置库文件输出到代码源路径下的lib文件夹中;

12.

13.find_package(LLVM REQUIRED CONFIG) #找到LLVM库,REQUIRED表示一定要找到这个库,找不到这个库,编译就直接结束,不再往下进行了

14.

15.llvm_map_components_to_libnames(LLVM_LIBRARIES all) #获取所有的LLVM库名称列表 保存在LLVM_LIBRARIES变量中

16.include_directories(${LLVM_INCLUDE_DIRS}) #设置LLVM库的头文件路径

17.

18.add_compile_options(-fno-rtti) #不用C++ RTTI 不然链接的时候会报错

19.

20.include_directories(${PROJECT_SOURCE_DIR}/include) #设置工程头文件路径

21.

22.

23.add_executable(CMDemo2 src/CMDemo2.cpp)

24.

25.target_link_libraries(CMDemo2 ${LLVM_LIBRARIES}) #添加依赖库

26.

三、运行效果

19ffef69878d9508e84af1d26ea30cc6.png

四、总结

通过利用LLVM库中提供的功能、方便的解决了我们的问题。不用什么都自己从造轮子开始,站在巨人的肩膀上可以让我们走得更快、飞得更高!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值