草庐IT

c++ - Swig -includeall 除了...

我有一个大型项目,其中使用Swig-includeall标志似乎很有意义。但是,有些文件我不想扩展,主要是STL库(例如vector和列表)。是否可以使用-includeall标志,但将某些文件列入黑名单以防止扩展(如vector和列表)? 最佳答案 来自DocsabouttheSWIGPreprocessor:SWIGfullysupportstheuseof#if,#ifdef,#ifndef,#else,#endiftoconditionallyincludepartsofaninterface.Thefollowingsym

c++ - Lua 绑定(bind)到 C++ 和垃圾回收

好的,这是我遇到的问题。我有一个渲染引擎的Lua绑定(bind),它有一个内部渲染管理器,它自己跟踪渲染场景的指针并管理它们。问题是,当我从Lua使用它时,如果我不保留对添加到C++渲染管理器的每个对象的Lua引用,它就会开始垃圾收集指针,当然会导致崩溃。我不是特别想保存对我创建的每一件东西的每一个引用。有没有办法强制Lua不对某些东西进行垃圾回收?有没有其他方法可以解决这个问题?我正在使用SWIG生成Lua绑定(bind)。 最佳答案 防止Lua对对象进行垃圾回收的一个简单方法是将该对象放入一个表中(称之为uncollection

java - 使用 SWIG 将 Java Map<String, String> 传递给 C++ 方法

我有一个用C++定义的方法:std::mapvalidate(std::mapkey,std::mapvalue);我想在Java中使用这个方法。所以,我必须使用Swig编写一个包装器,我将能够通过它来传递JavaMap作为STLmap到C++方法。请让我知道我应该如何为swig定义.i文件以完成这项工作。 最佳答案 为此,您需要使用java.util.Map告诉SWIG将%typemap(jstype)用于输入参数。您还需要提供一些代码以将Java映射类型转换为C++std::map类型,SWIG将在适当的点注入(inject)该

java - std::vector 使用 swig 生成 java.util.Vector 代码

我尝试用SWIG生成java代码在MyList.h中,我声明了一个名为_list的自定义列表对象List_list;并且这个List类继承自vectorclassList:publicvector在业务类中(在C++中)我返回一个自定义对象列表ListgetMyList(){....returnlist;}所以我想生成java代码,我可以在其中检索此C++列表作为java.util.List或java.util.Vector。在我的swig.i文件中,我无法管理如何体现%typemap(jstype)List"java.util.Vector"namespacestd{%templat

ios - 对静态库的非托管 C# 调用

我正在使用swig为一些要从C#使用的C代码库生成C#包装器。当我运行swig时,它会生成一个包装器c文件,该文件将所有功能公开给生成的PInvokeC#文件...例如://ThisisinKodLogic_wrap.cSWIGEXPORTvoidSWIGSTDCALLCSharp_DMGameMode_timeLimit_set(void*jarg1,unsignedshortjarg2){...}//ThisisinKodLogicPInvoke.cs[global::System.Runtime.InteropServices.DllImport("KodLogic",Entry

C ++内存泄漏在Swig Python模块中

背景我创建了一个python包裹一个的模块c++程序使用SWIG。它的工作正常,但是它存在一个非常严重的记忆泄漏问题,我认为这是处理不当的大型指针的结果map对象。我几乎没有经验c++,我有疑问是否delete[]可以在创建的对象上使用new在不同的功能或方法中。该程序是在2007年编写的,所以请原谅缺乏有用的c++11技巧。这swig扩展基本上只是包装一个C++类(Matrix)和一些功能。矩阵#ifndef__MATRIX__#define__MATRIX__#include#include#include#include#include#include#include#include#i

php - 过早收集资源垃圾

我用SWIG创建了一个PHP扩展一切正常,但我在链接方法调用时观察到一些奇怪的垃圾收集行为。例如,这有效:$results=$response->results();$row=$results->get(0)->iterator()->next();printf('%s%s'."\n",$row->getString(0),$row->getString(1));但是这个段错误:$row=$response->results()->get(0)->iterator()->next();printf('%s%s'."\n",$row->getString(0),$row->getStri

java - 将简单的 java 数组传递给原始 c 数组 swig

我想将一个简单的java数组传递给c。目前我使用以下.i文件来完成。%moduleexample%include"arrays_java.i"%include"example.h"%{#include"example.h"%}接受带有arrays_java.iheader的java数组。但它制作了数组的完整拷贝,这对我来说很慢。我尝试用这些构建类型映射,我可以使用GetDoubleArray函数来获取java数组的指针。在我使用swig之前,我使用JNIGetDoubleArrayElements构建了我自己的包装器,这要快得多。下面你可以看到我尝试在类型映射中使用Jni函数。%typ

android - Android OpenCV 端口有什么缺点吗?

我之前曾将OpenCV与Android结合使用,我一直试图做的是在我的native代码和我的java代码之间使用尽可能少的调用。当我查看OpenCVport但是,对于Android,他们似乎只是为每个native函数创建一个包装器函数,然后从java中调用它们。现在,除非我完全误解了swigwrappers的原理和这个端口的整个想法,否则这不会比在native代码中进行实际编码慢很多吗?我注意到在native代码和Java代码之间传递数据真的很慢,所以我不明白为什么它似乎是这个端口中最正常的事情。我自己确实使用过它,但我只是决定忽略所有包装器并按原样使用代码并使用Android教程提供

c++ - 了解 TensorFlow 中的操作注册和内核链接

我是TensorFlow的新手,现在正在研究自定义操作开发。我已经阅读了官方教程,但我觉得幕后发生了很多事情,我并不总是想将我的自定义操作放在user_ops目录中。因此,我占用了一个exampleword2vec它使用自定义的“Skipgram”操作,其注册在此处定义:/word2vec_o​​ps.cc其内核实现在这里:/word2vec_kernels.cc查看构建文件,我尝试构建单个目标1)bazelbuild-copttensorflow/models/embedding:word2vec_o​​ps这会按预期生成一堆目标文件。2)bazelbuild-copttensorf