小编Dou*_*oug的帖子

如何在OSX上的构建(不安装)的cmake中为可执行文件添加rpath?

因此,如果您已经有二进制文件,可以使用'install_name_tool'在OSX上添加一个rpath,如下所示:

install_name_tool -add_rpath @executable_path/blah
Run Code Online (Sandbox Code Playgroud)

当您构建应用程序包时,xcode会自动执行此操作.

我知道在cmake中你可以使用它来设置共享库的install_name:

set_target_properties(nshared PROPERTIES BUILD_WITH_INSTALL_RPATH 1 INSTALL_NAME_DIR "@rpath")
Run Code Online (Sandbox Code Playgroud)

我的问题是,为二进制文件添加rpath相当于什么呢?

(对于'为什么你会这样做?',在你的应用程序/文件夹中的任何应用程序上查看otool -l,你会看到很多应用程序的条目如下:

Load command 15
          cmd LC_RPATH
      cmdsize 36
         path @executable_path/../../Frameworks/
Run Code Online (Sandbox Code Playgroud)

这是标准做法.我只是想在cmake中做到这一点)

macos cmake

9
推荐指数
1
解决办法
8120
查看次数

如何在多个包中使用通用测试套件?

当我编写接口时,通常可以方便地在与接口相同的包中定义我的测试,然后定义实现接口集的多个包,例如.

package/
package/impl/x <-- Implementation X
package/impl/y <-- Implementation Y
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以在子包中运行相同的测试套件(在本例中,位于package/*_ test.go中)?

我到目前为止提出的最佳解决方案是添加一个测试包:

package/tests/
Run Code Online (Sandbox Code Playgroud)

它实现了测试套件,并在每个实现中进行测试以运行测试,但这有两个缺点:

1)包/测试中的测试不在_test.go文件中,最终成为实际库的一部分,由godoc等记录.

2)包/测试中的测试由自定义测试运行器运行,该测试运行器必须基本上复制'go test'的所有功能以扫描go测试并运行它们.

看起来像一个非常俗气的解决方案.

有没有更好的方法呢?

go

9
推荐指数
1
解决办法
1784
查看次数

如何为导出函数的节点模块编写打字稿定义文件?

考虑一下,对于toml节点模块,我可以简单地使用:

// toml.d.ts
declare module TOML {
    export function parse(value:string):any;
}

declare module "toml" {
    export = TOML;
}
Run Code Online (Sandbox Code Playgroud)

然后:

/// <reference path="../../../../../defs/toml/toml.d.ts"/>
import toml = require('toml');
toml.parse(...);
Run Code Online (Sandbox Code Playgroud)

但是,那些只导出单个函数的节点模块呢,比如'glob'(https://github.com/isaacs/node-glob).

该模块的节点用法是:

var glob = require("glob")
glob("*.js", {}, callback(err, files) { ... });
Run Code Online (Sandbox Code Playgroud)

你天真地期望你能做到这一点:

// glob.d.ts
declare function globs(paths:string, options:any, callback:{(err:any, files:string[]):void;
Run Code Online (Sandbox Code Playgroud)

...但是因为typescripts'import'语义有点奇怪,所以你似乎只能使用'import .. = require()'语句来为别名模块.试着打电话:

/// <reference path="../../../../../defs/glob/glob.d.ts"/>
import blog = require('glob');
Run Code Online (Sandbox Code Playgroud)

结果是:

error TS2072: Module cannot be aliased to a non-module type.
Run Code Online (Sandbox Code Playgroud)

那么,你会如何为此编写定义文件?

NB.请注意,这是针对使用节点的commonjs模块, …

commonjs typescript

9
推荐指数
1
解决办法
4035
查看次数

你如何在python中验证duck-typed接口?

class ITestType(object):
  """ Sample interface type """

  __metaclass__ = ABCMeta

  @abstractmethod
  def requiredCall(self):
    return

class TestType1(object):
  """ Valid type? """
  def requiredCall(self):
    pass

class TestType2(ITestType):
  """ Valid type """
  def requiredCall(self):
    pass

class TestType3(ITestType):
  """ Invalid type """
  pass
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,issubclass(TypeType*, ITestType)对于2返回true,对于1和3返回false.

是否有另一种方法可以使用issubclass,或者一种替代方法进行接口测试,允许1 2通过,但拒绝3?

能够使用duck typing而不是将类显式绑定到抽象类型对我来说非常有帮助,但是当duck-typed对象通过特定接口时也允许对象检查.

是的,我知道python人不喜欢接口,标准方法是"在失败时找到它并将所有内容包装在异常中",但也与我的问题完全无关.不,我不能简单地不在这个项目中使用接口.

编辑:

完善!对于发现此问题的任何其他人,以下是如何使用subclasshook的示例:

class ITestType(object):
  """ Sample interface type """

  __metaclass__ = ABCMeta

  @abstractmethod
  def requiredCall(self):
    return

  @classmethod
  def __subclasshook__(cls, C):
    required = ["requiredCall"]
    rtn = True
    for r in required:
      if …
Run Code Online (Sandbox Code Playgroud)

python

8
推荐指数
1
解决办法
2342
查看次数

如何从会话中确定sqlalchemy驱动程序?

某些库和站点(如kotti)公开从配置文件加载的数据库会话(它使用金字塔).

通常,您可以忽略sqlalchemy的驱动程序,但是有一些问题,例如获取随机行使用带有sqlite的时区,这需要您具有针对不同引擎的特定行为.

事实是,我无法看到如何确定您在运行时使用的驱动程序.

你怎么做到这一点?

具体来说,如何从会话(不是引擎或会话工厂)向后工作并弄清楚这一点?

python sqlalchemy

8
推荐指数
1
解决办法
1758
查看次数

你如何编写一个包含多个二进制文件的包?

我已经在不同的地方看过这个问题,答案就像'使用cmd/foo,cmd/bar'类型的文件夹结构.

这对我不起作用.

这有效:

$ du -a
8   ./src/cmd/bin1/main.go
8   ./src/cmd/bin1
8   ./src/cmd/bin2/main.go
8   ./src/cmd/bin2
16  ./src/cmd
8   ./src/shared/foo/foo.go
8   ./src/shared/foo
8   ./src/shared
24  ./src
Run Code Online (Sandbox Code Playgroud)

并建立它:

go build ./src/cmd/bin2
go build ./src/cmd/bin1
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚有什么变化:

go build ./src/...
Run Code Online (Sandbox Code Playgroud)

我可能需要一步构建所有这些二进制文件.

这个布局:

$ du -a
8   ./cmd/bin1/main.go
8   ./cmd/bin1
8   ./cmd/bin2/main.go
8   ./cmd/bin2
16  ./cmd
8   ./src/shared/foo/foo.go
8   ./src/shared/foo
8   ./src/shared
8   ./src
24  .
Run Code Online (Sandbox Code Playgroud)

似乎完全无法使用.没有go build ...命令组合似乎构建bin1或bin2.

我能得到的最好的是go build cmd/bin1/main.go给我一个名为'main'的二进制文件.没用.

因此,具体而详细地说,包括go build实际构建单个二进制文件的命令,你是如何做到这一点的?

...为什么人们一直在使用顶级cmd文件夹的默认建议?如果你这样做,你如何构建这些二进制文件?

go

8
推荐指数
4
解决办法
8106
查看次数

如何使用cmake导出系统库?

我怎么可以导出一个CMake的库所依赖的库,使得根据该库的可执行文件不必手动依赖于该库的依赖?

这有点拗口,所以这是一个例子:

dummy(application)---->依赖于liba

liba ---->取决于libpng

编译虚拟生成错误:

-- Found LIBPNG
-- Found LIBA
-- Configuring done
-- Generating done
-- Build files have been written to: /home/doug/projects/dummy/build
Linking C executable dummy
../deps/liba/build/liba.a(a.c.o): In function `a_dummy':
/home/doug/projects/dummy/deps/liba/src/a.c:6: undefined reference to `png_sig_cmp'
collect2: ld returned 1 exit status
make[2]: *** [dummy] Error 1
make[1]: *** [CMakeFiles/dummy.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

可以通过将其添加到CMakeLists.txt中解决这个问题:

TARGET_LINK_LIBRARIES(虚拟png)

但是,dummy不知道liba如何实现其api.在某些时候,可能会变成libjpg或其他东西,这会破坏虚拟应用程序.

在从cmake邮件列表获得一些帮助之后,我被引导到这个例子来导出东西:http: //www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file

然而,遵循这种方法让我陷入这条线:

export(TARGETS $ {LIBPNG_LIBRARY} FILE"$ {PROJECT_BINARY_DIR} /ALibraryDepends.cmake") …

c cmake

7
推荐指数
1
解决办法
5152
查看次数

我必须使用Autofac显式绑定普通类吗?

我似乎在我的代码中做了这么多:

public class ActionsModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);
            builder.Register(c => LogManager.GetCurrentClassLogger()).As<ILog>().InstancePerDependency();

            // Autofac doesn't seem to be able to inject things without explicit binding 
            builder.RegisterType<ComboActions>().As<ComboActions>().InstancePerHttpRequest();
            builder.RegisterType<AppActions>().As<AppActions>().InstancePerHttpRequest();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

'actions'类是一个类,我需要将其注入到我的控制器中,并具有各种其他子依赖项.

似乎有点垃圾.为什么autofac无法解析该类是否具有已满足依赖关系的构造函数并自动生成实例?

我的意思是,如果A类需要注入B类而B类需要C,D,E等等,我想你不想走遍整个依赖链,看看你是否可以在运行时创建一个类....但是如果A类直接依赖于明确约束的C和D,那肯定是一个微不足道的案例?

我错过了什么吗?似乎没有看到任何相关的文档......

c# autofac

7
推荐指数
2
解决办法
2846
查看次数

是否可以在没有标准库的情况下嵌入python?

是否可以在没有标准库的情况下嵌入python?

我正在使用python 2.7.6cmake构建,我已经运行了一个基本的嵌入式脚本,如下所示:

#include <stdio.h>
#include <Python.h>

int main(int argc, char *argv[]) {

  /* Setup */
  Py_SetProgramName(argv[0]);
  Py_Initialize();

  /* Run the 'main' module */
  int rtn = Py_Main(argc, _argv);
  Py_Finalize();

  return rtn;
}
Run Code Online (Sandbox Code Playgroud)

..但是当我运行它时,我得到:

ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)

如果我设置了正确的$ PYTHONHOME,它可以正常工作; 但这不是我想要做的.我试图在没有标准库的独立应用程序中嵌入python的副本.

我很欣赏它的使用,但对于这个特定的嵌入式环境,我想要更像lua的东西(但显然有python语法),其中只有父应用程序公开的特定库可用.

这还有一个额外的好处,即不关心分发(或构建)标准库及其所有交叉链接的动态库.

这有可能吗?或者我不可避免地会发现缺少语言的基本块,如sys.path,import,{},[]或类似标准库的一部分?

如果有可能,你会怎么做呢?

python python-embedding

7
推荐指数
1
解决办法
1828
查看次数

如何在go中上传文件?

关于http.Request在go中使用发布文件的教程很多,但几乎总是这样开始:

file, err := os.Open(path)
if err != nil {
    return nil, err
}
fileContents, err := ioutil.ReadAll(file)
Run Code Online (Sandbox Code Playgroud)

也就是说,您将整个文件读入内存,然后将其转换为a Buffer并将其传递给请求,如下所示:

func send(client *http.Client, file *os.File, endpoint string) {
    body := &bytes.Buffer{}
    io.Copy(body, file)
    req, _ := http.NewRequest("POST", endpoint, body)
    resp, _ := client.Do(req)
}
Run Code Online (Sandbox Code Playgroud)

如果你想发布一个庞大的文件并避免将其读入内存,而是将文件以块的形式提升......你会怎么做?

go

7
推荐指数
1
解决办法
4417
查看次数

标签 统计

go ×3

python ×3

cmake ×2

autofac ×1

c ×1

c# ×1

commonjs ×1

macos ×1

python-embedding ×1

sqlalchemy ×1

typescript ×1