美文网首页
如何将多个库集合到同一个动态链接库中

如何将多个库集合到同一个动态链接库中

作者: 最后一个前锋 | 来源:发表于2019-05-24 17:17 被阅读0次

同样是在TUM的Van-pooling项目中,项目中有多个.cpp文件,因为需要将他们统一到同一个.dll文件中以便在python中导入并调用其中的函数。另外,其实各个.cpp文件之间是相互关联的,所以说将它们分别单独导入也是无益的,因为那样没办法实现它们的功能。

1. 文件列表:

  • common.h: 供common.cppsimulation.cppmain.cpp使用的头文件;
  • common.cpp: 里面定义了构建路网的函数road_load()
  • simulation.h: 供simulation.cppmain.cpp使用的头文件;
  • simulation.cpp: 里面有实现scheduler功能的函数handle_event()
  • main.cpp: 主函数

2. 失败的初次尝试

刚开始是尝试着利用common.cppsimulation.cpp这两个文件分别生成两个静态链接库.lib文件,然后再在main.cpp中调用这两个文件,最后利用main.cpp转化出一个动态库.dll文件。结果就是一直失败,错误信息:

undefined reference to road_load()

大概是这样。原因去找过,但是毕竟不是科班,也没必要去了解太多,大概就是因为动态库连接不上那两个静态库。多次尝试解决无果之后,便作罢,因为那一天就已经结束了。而且当天下午开了个skype会议,然后我看出来带我的那个博士Moeid已经处于有点焦虑的状态了。倒不是我的问题,其实他之前给我的任务我都完成了。这个项目是个既“跨国”又跨平台的项目,“跨国”只是说是两个不同学校之间合作的项目,而跨平台则是因为合作院校那边的负责人用C++开发Scheduler,而TUM则利用SUMO的TraCI在Python上搭建Demand Enhancement Model。不好说太多细节,反正就是麻烦得很。焦虑的源头是因为他们已经在PythonC++的交互问题上浪费了三个月的时间,而导致Moeid这边的研究没办法继续,因为他的后续研究依赖Scheduler返回的结果。所以Moeid向我表示了忧虑,他说他没办法向Prof. Constantinos交代这一个月的工作,“我总不能告诉他我这个月又什么都没做吧?”。所以在周三的时候(22/5/2019),我给他打包票说,放心,我周五给你个答复。

3. 其实很简单

果然,这种事情如果交给学C++的人来做的话根本就不会是一个问题,但是交给像我这样的外行人来说,真的就是很费时间,或者说完全是在浪费时间。果然,还是应该像阿坤说的那样,应该好好去推公式的好。但是呢,我有转念一想了,如果我把这一条C++Python(SUMO)这条路打通了,那我以后可能就是在用SUMO的人里面唯一能够利用C++来加快自己算法的人,所以...或许,只是或许并不是件坏事。这样一安慰自己也就好了。转回正题,解决方案如下:(直接把交给Moeid的简单的工作报告的一部分给复制上来了,懒得再写了)
The steps are listed below, and the first three commands have the same function, that is creating a .o file depends on a '.cpp' file. And the last command is generating a .dll file by linking the three .o file generated in the last three steps.
- g++ -o common.o -c common.cpp
- g++ -o simulation.o -c simulation.cpp
- g++ -o main.o -c main.cpp
- g++ -shared -fPIC -o sche.dll common.o simulation.o main.o

相关文章

  • 如何将多个库集合到同一个动态链接库中

    同样是在TUM的Van-pooling项目中,项目中有多个.cpp文件,因为需要将他们统一到同一个.dll文件中以...

  • C和C++中动态链接库的创建和链接(原创,装载请注明原处)

    C和C++中动态链接库的创建和链接 1.创建DLL(动态链接库)-C++方式 1.创建DLL(动态链接库-C++方...

  • windows DLL共享变量

    在Windows中同一个dll或者可执行文件的多个实例之间的全局静态变量是独立的(Linux中动态链接库可以共享全...

  • 静态链接库和动态链接库

    静态链接库和动态链接库都是为了共享代码。如果使用静态链接库,lib文件中的指令就会被包含在exe中。若使用动态链接...

  • Linux链接库

    动态链接库(共享链接库) 杂项 生成.o文件 生成.so 使用动态库 静态链接库 杂项 生成.a 查看.a 使用静态库

  • JNI的静态注册和动态注册,及输出乱码解决

    [TOC] clang 生成动态链接库 命令介绍 不同操作系统的动态链接库后缀不相同 Windows里动态链接库后...

  • 提取系统的dylib

    1、动态链接库路径 iOS有一部分系统动态库是存放于动态链接库cache中,这个cache在/System/Lib...

  • 19、webpack dllPlugin

    webpack dllPlugin动态链接库文件,当三方链接库文件存在时,访问链接库文件,否则把三方库打包到文件中...

  • 4.2.2 如何实现构建动态链接库

    4.2.2 如何实现构建动态链接库问题一:如何实现构建动态链接库? 构建出动态链接库文件 构建输出的以下这四个文件...

  • C-3

    DLL-动态链接库 lib-静态链接库 编译成obj文件之后,将多个obj文件连接成lib文件。当程序用到lib里...

网友评论

      本文标题:如何将多个库集合到同一个动态链接库中

      本文链接:https://www.haomeiwen.com/subject/niknzqtx.html