
char exepath[MAX_PATH];
char dllpath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, exepath); //保存当前工作目录
GetModuleFileName(GetModuleHandle("我写的DLL的名字dll"), dllpath, MAX_PATH); //获取我写的DLL的路径
strrchr(dllpath, '\\') = '\0'; //取路径前面的目录
SetCurrentDirectory(dllpath); //将DLL所在的目录设置为当前工作目录
HMODULE lib = LoadLibrary("我调用的DLL的名字dll"); //直接Load就可以了
FreeLibrary(lib);
SetCurrentDirectory(exepath); //别忘了恢复当前工作目录
我们在优化网站时,客户要求网站静态化,但是很多人不知道静态化分为真静态和伪静态,为了让大家了解二者的区别及特点,下面介绍一下网站的URL的3种路径:动态路径,伪静态路径,动态路径。
静态路径和动态路径其实就是绝对路径和相对路径。
绝对路径就是非常明确的文件存放位置,如:c:\windows\system32\cmdexe
相对路径就是以当前所处位置为参照起始点来确定文件的存放位置,如:Program Files\ACD Systems\acdseeexe
它是可变的,可以是C盘,也可以是D盘,也可以是网络上的。
举个通俗的例子:比如你家与单位的距离是1000米,不管你身在何处它都是1000米(绝对路径),而当你不在家的时候,你可能离你的单位有5000米,也可能只有200米(相对路径)。
比如在你制作网页时,使用绝对路径的话,在自己电脑上进行测试没问题,可一旦上传到网络服务器上时就会出现找不到文件的错误,而使用相对路径就不会出现这样的问题。
动态路径选择(Adaptive Routing),通常用在数据网络中,是指一个网络选择一个新的通信路径来获取大流量或电路故障。这个调整是为了允许尽可能多的路由器保持有效(就是说,使目的文件能够收到),适应改变。一些路由协议被用于这个目的:RIP、OSPF、IS-IS、IGRP/EIGRP等等
静态路径像这种:>
令f[i][j]表示从第i行第j个数走到底所能得到的最小和,则有:
f[i][j]=min(f[i+1][j],f[i+1][j+1])+a[i][j],式中a[i][j]为第i行第j个数的值,最后一行f[i][j]=a[i][j],则f[1][1]即为答案
在自己的Mac上写了一个基于OpenCV的简单程序;需要传给其他人共同调试,但是可执行文件在他人的Mac上无法运行;执行时会提示:
这样就引申出来一个问题: 在xcode下编译出的程序,在开发机器上运行是没有问题的。但是给其他用户用,就可能出问题。因为用户不一定有这个库。
有两种方法可以解决这个问题;一是给其他用户也安装依赖的库文件;二是将所有的dylib随行发布,消除依赖。
第一种方案不考虑,大部分时候这样做并不现实;下面说说如何随行发布dylib。
单纯将依赖的dylib文件拷贝到可执行文件目录下一同传输过去是不能消除依赖的;执行的时候还是报错;
在编译一个动态库的时候, 你需要指定 INSTALL_PATH 也就是它的安装路径;编译完成后如果一个可执行程序使用了该动态库, 那么在编译可执行程序的时候, 动态库的 INSTALL_PATH 会被记录到可执行程序中, 用来定位这个动态库。
因此我们首先需要将用到的dylib文件都拷贝到可执行文件目录下,然后改变动态库的INSTALL_PATH;将其改到可执行文件所在目录;
需要注意的是 :如果依赖多个动态库,用到的动态库已会依赖其他动态库,因此用到的所有的动态库的依赖动态库路径都需要修改。
以OpenCV为例子,假设最终编译出来的可执行文件为 macimgproc ;执行命令: otool -L macimgproc 可看到如下的输出:
说明macimgproc依赖所有的OpenCV动态库文件;因此首先需要将所有动态库文件拷贝到macimgproc所在目录,然后需要将macimgproc文件中的所有 /usr/local/opt/opencv/lib/libopencv_xxx 修改为 @executable_path/libopencv_xxx ;
@executable_path 表示可执行文件所在目录;指示所有OpenCV动态库从可执行文件所在目录查找;
更多 @executable_path 的介绍以及其他变量参见文章 @rpath, @loader_path, @executable_path 。
使用命令 install_name_tool -change {olddylib} {newdylib} {filename} 修改动态库的INSTALL_PATH,例如:
执行后重新 otool -L macimgproc 可看到如下的输出:
依次修改所有依赖即可。
整个OpenCV库大概有19个dylib文件,因此写了一个简单的批量修改脚本:
>
以上就是关于vc动态链接库的调用 LoadLibrary()路径问题全部的内容,包括:vc动态链接库的调用 LoadLibrary()路径问题、一个网站可以既存在动态路径又存在静态路径吗到底什么是动态路径,什么是静态路径呢、用动态规划法求总和最大的路径 问题如下(求详细程序代码)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)