我有一个用 CGo 制作的共享库,它在 Linux 和 Android 上链接良好。但是当使用 Microsoft Visual Studio 2017 在 Windows 10 上编译时,出现以下错误:
Microsoft (R) Program Maintenance Utility Version 14.16.27024.1
Copyright (C) Microsoft Corporation. All rights reserved.
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_QUICKCONTROLS2_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -I. -Irelease -I..\..\Qt\5.12.0\msvc2017_64\include -I..\..\Qt\5.12.0\msvc2017_64\include\QtQuickControls2 -I..\..\Qt\5.12.0\msvc2017_64\include\QtQuick -I..\..\Qt\5.12.0\msvc2017_64\include\QtGui -I..\..\Qt\5.12.0\msvc2017_64\include\QtANGLE -I..\..\Qt\5.12.0\msvc2017_64\include\QtQml -I..\..\Qt\5.12.0\msvc2017_64\include\QtNetwork -I..\..\Qt\5.12.0\msvc2017_64\include\QtCore -Irelease -I\include -I..\..\Qt\5.12.0\msvc2017_64\mkspecs\win32-msvc -Forelease\ @C:\Users\Nick\AppData\Local\Temp\nm2B40.tmp
connekt.cpp
c2.cpp
cgo-gcc-export-header-prolog(15): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
cgo-gcc-export-header-prolog(15): error C2146: syntax error: missing ';' before identifier 'GoUintptr'
cgo-gcc-export-header-prolog(18): error C2146: syntax error: missing ';' before identifier 'GoComplex64'
cgo-gcc-export-header-prolog(18): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
cgo-gcc-export-header-prolog(19): error C2371: '_Complex': redefinition; different basic types
cgo-gcc-export-header-prolog(18): note: see declaration of '_Complex'
cgo-gcc-export-header-prolog(19): error C2146: syntax error: missing ';' before identifier 'GoComplex128'
cgo-gcc-export-header-prolog(19): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Generating Code...
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\cl.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\nmake.exe"' : return code '0x2'
Stop.
库的头文件(.h)是由Cgo生成的,它包含这些行:
typedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
//typedef __SIZE_TYPE__ GoUintptr;
typedef size_t GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;
例如,在这一行报告了一个错误:
typedef float _Complex GoComplex64;
但是float _Complex是一个已经定义好的类型,为什么不能别名为GoComplex64呢?
为了修复 GoUintptr,我注释了 SIZE_TYPE 行并将其替换为 size_t,但它也无法编译:
//typedef __SIZE_TYPE__ GoUintptr;
typedef size_t GoUintptr;
这里可以做些什么来修复这些编译错误?也许有一些标志可以使 Visual C++ 不那么严格? (因为在其他平台上我没有任何问题)
最佳答案
有同样的问题 - 我最终注释掉了 _Complex 类型 (GoComplex..) 以及 __SIZE_TYPE__ (GoUintPtr) - 这样,.h 编译
typedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
//typedef __SIZE_TYPE__ GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
//typedef float _Complex GoComplex64;
//typedef double _Complex GoComplex128;
但是,我仍然没有使用 cl 链接它:
> cl /EHsc /I ..\libBleveIndexTest main.cpp ..\libBleveIndexTest\libBleveIndexTest.a
Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27024.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
cl : Command line warning D9024 : unrecognized source file type '..\libBleveIndexTest\libBleveIndexTest.a', object file assumed
main.cpp
Microsoft (R) Incremental Linker Version 14.16.27024.1
Copyright (C) Microsoft Corporation. All rights reserved.
/out:main.exe
main.obj
..\libBleveIndexTest\libBleveIndexTest.a
libBleveIndexTest.a(go.o) : warning LNK4078: multiple '.text' sections found with different attributes (60600060)
libBleveIndexTest.a(000005.o) : warning LNK4217: locally defined symbol _errno imported in function x_cgo_sys_thread_create
libBleveIndexTest.a(000007.o) : warning LNK4049: locally defined symbol _errno imported
libBleveIndexTest.a(000005.o) : error LNK2019: unresolved external symbol __imp___iob_func referenced in function _cgo_preinit_init
libBleveIndexTest.a(000006.o) : error LNK2001: unresolved external symbol __imp___iob_func
libBleveIndexTest.a(000007.o) : error LNK2001: unresolved external symbol __imp___iob_func
libBleveIndexTest.a(000005.o) : error LNK2019: unresolved external symbol __imp__beginthread referenced in function x_cgo_sys_thread_create
libBleveIndexTest.a(000007.o) : error LNK2001: unresolved external symbol __imp__beginthread
main.exe : fatal error LNK1120: 2 unresolved externals
__imp__iob...我可以通过添加来修复:
extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }
到主要的 C 源代码。 但是,我无法修复“__imp__beginthread”。
关于c++ - Cgo 生成的源代码无法在 MVC 上编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564365/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A