精华内容
下载资源
问答
  • CMake链接外部库的几种方式

    千次阅读 2020-05-29 15:02:57
    CMake链接外部库的几种方式 ######################################################### 链接库开始 ############################################################### # 1,绝对路径方式 #target_link_libraries...

    CMake链接外部库的几种方式

    ######################################################### 链接库开始 ###############################################################
    
    # 1,绝对路径方式
    #target_link_libraries(MyApp E:/cppTest/test1/lib/libutils.a)
    
    # 2,相对路径,使用相对路径必须先告诉从哪里链接,在这里调用link_directories()是无效的,只有在生成target之前调用才会有效
    # 在这里调用link_directories()是无效的,必须在生成可执行文件之前调用link_directories(),也就是在ADD_EXECUTABLE()之前调用
    #link_directories(E:/cppTest/test1/lib)
    #target_link_libraries(MyApp utils)
    #target_link_libraries(MyApp libutils.a)
    #message(STATUS "LINK_DIRECTORIES = ${LINK_DIRECTORIES}")
    
    # 3,使用find_library()  
    # find_library (<VAR> name1 [path1 path2 ...])
    #find_library(LIB_UTILS utils E:/cppTest/test1/lib)
    #message(STATUS "LIB_UTILS = ${LIB_UTILS}")
    #target_link_libraries(MyApp ${LIB_UTILS})
    
    
    # 4,使用find_path()find_library()类似,find_path()可以用来找任何文件
    # find_path (<VAR> name1 [path1 path2 ...])
    #find_path(LIB_UTILS_PATH libutils.a E:/cppTest/test1/lib)
    #message(STATUS "LIB_UTILS_PATH = ${LIB_UTILS_PATH}")
    #target_link_libraries(MyApp ${LIB_UTILS_PATH}/libutils.a)
    
    #5,使用find_package(),这种需要先有模块,要么是系统提供的,要么是自己写的,本例中是自己写的Findutils.cmake
    #cmake提供的模块 D:\androidSDK\cmake\3.10.2.4988404\share\cmake-3.10\Modules下面
    #将自己写的自己写的Findutils.cmake设置到CMAKE_MODULE_PATH中
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
    find_package(utils)
    if(utils_FOUND)
    	# include_directories()作用是设置头文件的搜索路径
    	# 官方的解释:Add the given directories to those the compiler uses to search for include files
    	# utils_INCLUDE_DIR的值是在Findutils.cmake里面设置的
    	include_directories(${utils_INCLUDE_DIR})
    	
    	#utils_LIBRARY的值是在Findutils.cmake里面设置的
    	target_link_libraries(MyApp ${utils_LIBRARY})
    endif(utils_FOUND)
    
    
    ######################################################### 链接库结束 ###############################################################
    
    展开全文
  • 容器之间的链接是一很常见的操作:它提供了访问其中的某个容器的网络服务而不需要将所需的端口暴露给Docker Host主机的功能。Docker Compose中对该特性的支持同样是很方便的。然而,如果需要链接的容器没有定义在...

    容器之间的链接是一种很常见的操作:它提供了访问其中的某个容器的网络服务而不需要将所需的端口暴露给Docker Host主机的功能。Docker Compose中对该特性的支持同样是很方便的。然而,如果需要链接的容器没有定义在同一个 docker-compose.yml 中的时候,这个时候就稍微麻烦复杂了点。

    在Docker中,容器之间的链接是一种很常见的操作:它提供了访问其中的某个容器的网络服务而不需要将所需的端口暴露给Docker Host主机的功能。Docker Compose中对该特性的支持同样是很方便的。然而,如果需要链接的容器没有定义在同一个 docker-compose.yml 中的时候,这个时候就稍微麻烦复杂了点。

    在不使用Docker Compose的时候,将两个容器链接起来使用 —link 参数,相对来说比较简单,以 nginx 镜像为例子:

    1. docker run --rm --name test1 -d nginx  #开启一个实例test1 
    2. docker run --rm --name test2 --link test1 -d nginx #开启一个实例test2并与test1建立链接 

    这样, test2 与 test1 便建立了链接,就可以在 test2 中使用访问 test1 中的服务了。

    如果使用Docker Compose,那么这个事情就更简单了,还是以上面的 nginx 镜像为例子,编辑 docker-compose.yml 文件为:

    1. version: "3" 
    2. services: 
    3.  test2: 
    4.  image: nginx 
    5.  depends_on: 
    6.  - test1 
    7.  links: 
    8.  - test1 
    9.  test1: 
    10.  image: nginx 

    最终效果与使用普通的Docker命令 docker run xxxx 建立的链接并无区别。这只是一种最为理想的情况。

    1. 如果容器没有定义在同一个 docker-compose.yml 文件中,应该如何链接它们呢?
    2. 又如果定义在 docker-compose.yml 文件中的容器需要与 docker run xxx 启动的容器链接,需要如何处理?

    针对这两种典型的情况,下面给出我个人测试可行的办法:

    1. 方式一:让需要链接的容器同属一个外部网络

    我们还是使用nginx镜像来模拟这样的一个情景:假设我们需要将两个使用Docker Compose管理的nignx容器( test1 和 test2 )链接起来,使得 test2 能够访问 test1 中提供的服务,这里我们以能ping通为准。

    首先,我们定义容器 test1 的 docker-compose.yml 文件内容为:

    1. version: "3" 
    2. services: 
    3.  test2: 
    4.  image: nginx 
    5.  container_name: test1 
    6.  networks: 
    7.  - default 
    8.  - app_net 
    9. networks: 
    10.  app_net: 
    11.  external: true 

    容器 test2 内容与 test1 基本一样,只是多了一个 external_links ,需要特别说明的是: 最近发布的Docker版本已经不需要使用external_links来链接容器,容器的DNS服务可以正确的作出判断 ,因此如果你你需要兼容较老版本的Docker的话,那么容器 test2 的 docker-compose.yml文件内容为:

    1. version: "3" 
    2. services: 
    3.  test2: 
    4.  image: nginx 
    5.  networks: 
    6.  - default 
    7.  - app_net 
    8.  external_links: 
    9.  - test1 
    10.  container_name: test2 
    11. networks: 
    12.  app_net: 
    13.  external: true 

    否则的话, test2 的 docker-compose.yml 和 test1 的定义完全一致,不需要额外多指定一个 external_links 。相关的问题请参见stackoverflow上的相关问题: docker-compose + external container

    正如你看到的那样,这里两个容器的定义里都使用了同一个外部网络 app_net ,因此,我们需要在启动这两个容器之前通过以下命令再创建外部网络:

    1. docker network create app_net 

    之后,通过 docker-compose up -d 命令启动这两个容器,然后执行 docker exec -it test2 ping test1 ,你将会看到如下的输出:

    1. docker exec -it test2 ping test1 
    2. PING test1 (172.18.0.2): 56 data bytes 
    3. 64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.091 ms 
    4. 64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.146 ms 
    5. 64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.150 ms 
    6. 64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.145 ms 
    7. 64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.126 ms 
    8. 64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.147 ms 

    证明这两个容器是成功链接了,反过来在 test1 中ping test2 也是能够正常ping通的。

    如果我们通过 docker run --rm --name test3 -d nginx 这种方式来先启动了一个容器( test3 )并且没有指定它所属的外部网络,而需要将其与 test1 或者 test2 链接的话,这个时候手动链接外部网络即可:

    1. docker network connect app_net test3 

    这样,三个容器都可以相互访问了。

    方式二:更改需要链接的容器的网络模式

    通过更改你想要相互链接的容器的网络模式为 bridge ,并指定需要链接的外部容器( external_links )即可。与同属外部网络的容器可以相互访问的链接方式一不同,这种方式的访问是单向的。

    还是以nginx容器镜像为例子,如果容器实例 nginx1 需要访问容器实例 nginx2 ,那么 nginx2 的 doker-compose.yml 定义为:

    1. version: "3" 
    2. services: 
    3.  nginx2: 
    4.  image: nginx 
    5.  container_name: nginx2 
    6.  network_mode: bridge 

    与其对应的, nginx1 的 docker-compose.yml 定义为:

    1. version: "3" 
    2. services: 
    3.  nginx1: 
    4.  image: nginx 
    5.  external_links: 
    6.  - nginx2 
    7.  container_name: nginx1 
    8.  network_mode: bridge 

    需要特别说明的是,这里的 external_links 是不能省略的,而且 nginx1 的启动必须要在 nginx2 之后,否则可能会报找不到容器 nginx2 的错误。

    接着我们使用ping来测试下连通性:

    1. $ docker exec -it nginx1 ping nginx2  # nginx1 to nginx2 
    2. PING nginx2 (172.17.0.4): 56 data bytes 
    3. 64 bytes from 172.17.0.4: icmp_seq=0 ttl=64 time=0.141 ms 
    4. 64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.139 ms 
    5. 64 bytes from 172.17.0.4: icmp_seq=2 ttl=64 time=0.145 ms 
    6.  
    7. $ docker exec -it nginx2 ping nginx1 #nginx2 to nginx1 
    8. ping: unknown host 

    以上也能充分证明这种方式是属于单向联通的。

    展开全文
  • LNK2001: 无法解析的外部符号的几种情况

    万次阅读 多人点赞 2018-11-01 09:01:51
    error LNK2001: 无法解析的外部符号无法解析几种情况: 1&amp;amp;gt;MSVCRT.lib(MSVCR90.dll) : error LNK2005: _printf 已经在 libcurl.lib(pqueue.obj) 中定义 1&amp;amp;gt;MSVCRT.lib(MSVCR90.dll) :...

    一般来说,我们引用第三方库时,需要进行指定依赖项配置,若没有进行相关配置,则编译器会出现“LNK2001: 无法解析的外部符号”错误。

    这个是最常见的问题,具体步骤
    项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项
    项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项

    若已经按照上述步骤进行配置,但编译器还是报错,可能情况如下:

    1.编译lib库和引用lib库平台不一致

    lib库采用的编译平台和引用该lib的工程的编译平不兼容导致的。比如项目采用vs2008编译,而该lib是用2010编译的,亦或者项目采用vs2015平台,而lib是vs2008编译的也可能导致链接失败。

    2.编译lib库和引用lib库选项不一致情况

    1、一个lib库采用“多线程 DLL (/MD)”配置,而另外一个项目采用“多线程(/MT)”编译配置
    2、一个lib库采用“使用 Unicode 字符集”配置,而另外一个项目采用“使用多字节字符集”编译配置
    3、一个lib库采用选择“release 版本 ”配置,而另外一个项目采用选择 “debug 版本 ”编译配置
    4、一个lib库采用“wind32平台 ”配置,而另外一个项目采用“wind64平台 ”编译配置

    3.没有添加指定预编译宏

    在使用curl静态库时,却遇到了编译链接错误:
    1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_init
    1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_setopt
    1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_perform
    1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_cleanup

    解决方法是,在自己的项目属性中添加一个预编译宏,CURL_STATICLIB,

    为了避免遇到以上问题建议:

    1、引用第三方库时,确认lib库是否使用相同编译平台
    2、确认编译选项是否一致。比如运行时库和字符集
    3、若需要则添加指定编译宏
    4、添加附加库目录和附加依赖项

    展开全文
  • error LNK2019: 无法解析的外部符号这个错之前见过很多次,能知道最根本的原因在于链接过程中没有搜索到程序用到的库文件,即*.lib。 笔记本重装了系统,32Bit升到64Bit,运行VTK程序时,始终报错如下: 1> ...

    1.前言

    error LNK2019: 无法解析的外部符号这个错之前见过很多次,能知道最根本的原因在于链接过程中没有搜索到程序用到的库文件,即*.lib。
    笔记本重装了系统,有32Bit升到64Bit,运行VTK程序时,始终报错如下:
    1>     正在创建库 E:\Driverprogram\imgport\Debug\imgport.lib 和对象 E:\Driverprogram\imgport\Debug\imgport.exp
    1>Monitor.obj : error LNK2019: 无法解析的外部符号 "int __cdecl start_convert(int,int,char *,bool)" (?start_convert@@YAHHHPAD_N@Z),该符号在函数 "int __stdcall iEndDocPort(void *)" (?iEndDocPort@@YGHPAX@Z) 中被引用
    1>p2jpg.obj : error LNK2019: 无法解析的外部符号 "void __cdecl jpeg_destroy_compress(struct jpeg_compress_struct *)" (?jpeg_destroy_compress@@YAXPAUjpeg_compress_struct@@@Z),该符号在函数 _Bmp2Jpg 中被引用
    1>p2jpg.obj : error LNK2019: 无法解析的外部符号 "void __cdecl jpeg_finish_compress(struct jpeg_compress_struct *)" (?jpeg_finish_compress@@YAXPAUjpeg_compress_struct@@@Z),该符号在函数 _Bmp2Jpg 中被引用
    1>p2jpg.obj : error LNK2019: 无法解析的外部符号 "unsigned int __cdecl jpeg_write_scanlines(struct jpeg_compress_struct *,unsigned char * *,unsigned int)" (?jpeg_write_scanlines@@YAIPAUjpeg_compress_struct@@PAPAEI@Z),该符号在函数 _Bmp2Jpg 中被引用。

    已经确信所有的依赖库文件都已经正确加载,为什么还会出现这个问题???
    本文重点归纳error LNK2019出现的原因,并提供相应的解决办法。

    2.原因归纳

    2.1 采用开源程序,忘记添加依赖项

    这个是最常见的问题。
    解决办法如下:
    VC6:
    工程、设置、C/C++、分类:Preprocessor、附加包含路径:填写附加头文件所在目录 逗号间隔多项
    工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项
    工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项
    VS20xx:
    项目、属性、C/C++、附加包含目录:填写附加头文件所在目录 分号间隔多项
    项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项
    项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项

    2.2 X64编译,采用Win32Debug

    这个错误就是困扰笔者一天的Bug所在。之前完全没有发现。我一直采用32Bit操作系统进行VITK开发,因为兼容国外的一个开源程序法,更换了64Bit系统!
    用过VITK的人都知道,在使用他们是必须在当前的环境下进行编译生成*.lib和*.dll文件。因此 利用VS2013 DeBug+X64编译了这些文件,但是在运行程序时报错了!!!
    这是Win32和X64细节造成的!更改前后如下图所示:



    3. VS2010  Win32转换X64

    1.点击“Win32”下拉框,打开“配置管理器”

    2.点击“活动解决方案管理平台”下拉框,选“新建”

    3.点击“键入或选择新平台”下拉框,选"x64",然后点击“确定”

    4.配置完成,可以看见项目平台都变为x64了,点击关闭即完成。


    展开全文
  • 1.使用Unity3d内置的Network方法,采用RPC(远程过程调用)的方式来进行网络编程,优点是方便,最多支持32个用户连接,适合做休闲的“开...Unity3d官方论坛一个master用来做大厅分发服务器采用Raknet,效率还不
  • 链接外部css的两方法

    千次阅读 2019-04-07 12:05:56
    链接外部css文件有几种方法,它们什么区别? 答:两种。 一、用link标签引入 <link rel="stylesheet" href="a.css" /> 二、@import方式: <style>@import url('a.css');</style> 区别1:link...
  • “error LNK2019: 无法解析的外部符号”的几种可能原因 【图片版见word笔记】 来源:http://blog.csdn.net/shenziheng1/article/details/54588457 1.前言error LNK2019: 无法解析的外部符号这个错之前见过很多次...
  • Spring-Boot 访问外部接口的几种方案总结

    万次阅读 多人点赞 2018-12-14 23:10:56
    在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求,针对这一需求目前存在着三解决方案,下面将对这三方案进行整理和说明。 二、Spring-Boot项目中访问外部接口 2.1 ...
  • error LNK2019: 无法解析的外部符号的几种情况探讨

    千次阅读 多人点赞 2013-11-24 11:50:11
    error LNK2019: 无法解析的外部符号的几种情况探讨。
  • "无法解析的外部符号"的几种情况

    千次阅读 2014-06-23 22:31:55
    当用Visual Studio 链接程序时,往往会产生”无法解析的外部符号“这一错误,但是我们只能看到错误产生的位置是因为使用了某一个外部函数,我们暂且称之为问题函数,所有使 用这个问题函数的函数都会产生类似的...
  • Error LNK2001 无法解析的外部符号 的几种情况及解决办法
  • 无法解析的外部符号的几种可能

    千次阅读 2011-03-09 22:04:00
    无法解析的外部符号的几种可能  1. lib 文件未引入。可使用“#pragma comment(lib, “winsock.lib”) ”语句添加 lib 引用,也可在项目依赖里添加。 2. 类方法的实现未加类标识。如, “CTest::...
  • 这就涉及到外部程序调用...弄了1天发现了几种方法: 方法1:discuz登陆框是ajax调用的,一开始在firebug下看到了调用了接口: ? 1 2 http://pekdo.com/member.php  ?mod=logging&action
  • SQL Server创建链接服务器的几种方式

    千次阅读 2020-11-24 13:04:53
    链接服务器,我们不需要写任何的程序,就可以实现将一个数据库的数据复制到另一个数据库。 SQL Server链接服务器不仅可以帮助你链接SQL Server,还可以链接Oracle、Access、MySQL、ODBC数据源。 1. SQL Server...
  • 原因总结 1.1 采用开源程序,忘记添加依赖项 解决办法如下: VC6: 工程、设置、C/C++、...项目、属性、C/C++、附加包含目录:填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、常规、附加库目录:填写附.
  • 今天写了一个小程序,然后碰到了“Error LNK2001 无法解析的外部符号”这个问题,一直解决不了,后来上网搜了下,发现这里面的关于这类错误的内容归纳比较齐全,就摘下来作为参考了。 VC++时经常会遇到链接错误...
  • Error LNK2001 无法解析的外部符号 的几种情况及解决办法 .  今天写了一个小程序,然后碰到了“Error LNK2001 无法解析的外部符号”这个问题,一直解决不了,后来上网搜了下,发现这里面的关于这类错误的...
  • html调用外部文件的几种常见方法

    千次阅读 2011-12-01 15:19:08
    网站设计很多时候在每一个网页都要使用同一的重复的部分,如每页的LOGO、导航栏设计、 版权信息等等,如果设计的时候没有将这些始终重复的部分独立出来,需要修改的时候就会修改所有页面的同一个地方,将是非常...
  • 使用第三方库文件编写应用时经常会出现链接错误:错误 22 error LNK2019: 无法解析的外部...在Visual Studio中办法可以將lib文件添加到链接依赖项中,在链接处理时就会从这些库文件中查找需要链接到目标文件中的
  • js 跳转链接几种方式

    千次阅读 2019-03-26 09:55:13
    跳转链接 在当前窗口打开 window.location.href="http://www.baidu.com"; //等价于<a href="baidu.com" target="_self">go baidu</a> 跳转链接 在新窗口打开 window.open("http://www.baidu.com");...
  • 无法解析的外部符号的几种可能   1. lib 文件未引入。可使用“#pragma comment(lib, “winsock.lib”) ”语句添加 lib 引用,也可在项目依赖里添加。 2. 类方法的实现未加类标识。如, “CTest::Connect...
  • 今天写了一个小程序,然后碰到了“Error LNK2001 无法解析的外部符号”这个问题,一直解决不了,后来上网搜了下,发现这里面的关于这类错误的内容归纳比较齐全,就摘下来作为参考了。  原文: ...
  • 一: Scheme协议完成外部链接跳转app指定页面 什么是 URL Scheme?  android中的scheme是一页面内跳转协议,是一非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过...
  • 上篇讲了”网站SEO关键词布局操作大全“,这篇讲链接,网站是通过一个一个链接搭建到一块的,所有网站之间以及网站和用户之间也都是通过链接进行联系起来的,同样也是搜索引擎爬取和识别的线路,那么都有哪链接?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 197,094
精华内容 78,837
关键字:

外部链接有哪几种