我按照 link 的说明构建了库.为了将该库链接到 Visual Studio,我使用了以下方法,但它们都不能链接到我构建的 .lib 文件。
Windows系统变量添加动态库路径(Environment variables -> Path)
Visual Studio(包含头文件和源文件 C++)
链接库
添加对象库文件名
为了链接的目的我添加了
最后我补充
#pragma comment (lib, "libxbee3.lib")
#pragma comment (lib, "libxbee3.dll")
我收到 Unresolved external 错误,提示我无法成功链接该库。感谢您的帮助。
错误日志
Error 1 error LNK2019: unresolved external symbol _xbee_setup referenced in function _wmain C:\Users\venushka\documents\visual studio 2013\Projects\xbeetest\xbeetest\xbeetest.obj
Error 2 error LNK2019: unresolved external symbol _xbee_shutdown referenced in function _wmain C:\Users\venushka\documents\visual studio 2013\Projects\xbeetest\xbeetest\xbeetest.obj
Error 3 error LNK2019: unresolved external symbol _xbee_conGetTypes referenced in function _wmain C:\Users\venushka\documents\visual studio 2013\Projects\xbeetest\xbeetest\xbeetest.obj
Error 4 error LNK2019: unresolved external symbol _xbee_errorToStr referenced in function _wmain C:\Users\venushka\documents\visual studio 2013\Projects\xbeetest\xbeetest\xbeetest.obj
Error 5 error LNK1120: 4 unresolved externals C:\Users\venushka\documents\visual studio 2013\Projects\xbeetest\Debug\xbeetest.exe 1
最佳答案
您已经涵盖了大部分基本问题并且 "usual" suspects在 OP 中,例如库位置、名称等。
其他问题可能包括;
dumpbin/exports 检查)鉴于提供的示例代码(链接在评论中)、构建的 lib 和 dll 的链接,我已经能够验证(使用 VS2015 更新 2);
extern "C" 似乎已正确应用#define EXPORT __declspec(dllimport)。鉴于上述内容以及 x64 库和 dll,我可以编译和链接示例代码。
它离开 x86 与 x64 目标。默认情况下,VS 向导针对命令行应用程序的 x86。使用这些默认值,我能够重现错误。
添加x64平台;
添加后,在构建菜单中,选择 x64 平台目标并重建示例应用程序。
如果 x86 平台是预期目标,则需要重建 libxbee3 库以针对 x86 平台而不是 x64 平台。
旁注; VS2015 警告不匹配的 x86 和 x64 目标(在更新 2 上测试)。
关于不兼容的符号导出注释。
您在赏金说明中提到您;
That library was make from the source files of git ( make GNU for windows)
很可能,这里使用的编译器是 gcc。这在用于导出符号的属性的链接代码库中得到支持;
#define EXPORT __attribute__((visibility("default")))
搜索用于获得类似结果的 MSVC 符号 __declspec(dllexport),没有产生任何结果。
要从 dll 导入符号(并在您的项目中使用它们),MSVC 编译器需要在所需符号上使用相应的 __declspec(dllimport)。
典型的(对于 MSVC)库端预处理器 block 是;
#ifdef BUILDING_MY_DLL
#define MY_DLL_API __declspec(dllexport)
#else
#define MY_DLL_API __declspec(dllimport)
#endif
上述 block 通常包含在 header 中,导出的符号标记为 MY_DLL_API。构建库时,定义 BUILDING_MY_DLL 在命令行或某些内部包含的 header 中定义。构建 exe(或客户端)时,未生成定义 BUILDING_MY_DLL,因此符号被标记为导入。
要解决导入/导出符号问题,有一些基本方法。
首先是修改代码,用MSVC重建dll,并使用上面的dllexport和dllimport;
#ifdef BUILDING_LIBXBEE3
// define BUILDING_LIBXBEE3 on the command line when building the dll...
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
第二种,将所需的函数签名(和类型)提取到私有(private) header 中以供使用,并使用正确的 dllimport 单独注释它们。
extern "C" {
// ... other definitions required
__declspec(dllimport)
xbee_err xbee_setup(struct xbee **retXbee, const char *mode, ...);
} // extern "C"
第三种方法是仅定义已用作 __declspec(dllimport) 的 EXPORT 并确保定义出现在包含任何库的头文件之前。基本上添加;
#define EXPORT __declspec(dllimport)
在任何包含“xbee.h”之前的文件,例如“stdafx.h”
关于c++ - 将库 (.lib) 链接到 Visual Studio 2013 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494910/
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195
我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正