Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将库与DLL链接(导入)_Python_Windows_Bazel - Fatal编程技术网

Python 如何将库与DLL链接(导入)

Python 如何将库与DLL链接(导入),python,windows,bazel,Python,Windows,Bazel,遵守以下规则: # in @org_python cc_library( name = "lib", srcs = [ "libs/python35.lib", ], ... # in // cc_binary( name = "bin", srcs = [ "mypybinding.cpp", ], deps = [ "@org_python//:lib", ], 链接

遵守以下规则:

# in @org_python
cc_library(
    name = "lib",
    srcs = [
         "libs/python35.lib",
    ],
    ...

# in //
cc_binary(
    name = "bin",
    srcs = [
        "mypybinding.cpp",
    ],
    deps = [
        "@org_python//:lib",
    ],
链接会产生很多:

mypybinding.o : error LNK2001: unresolved external symbol PyType_Type
正确链接导入库需要哪些步骤


问题似乎部分在于
python35.lib中的这个条目:

Version      : 0
Machine      : 8664 (x64)
TimeDateStamp: 576F0350 Sun Jun 26 00:18:56 2016
SizeOfData   : 00000019
DLL name     : python35.dll
Symbol name  : PyType_Type
Type         : data
Name type    : name
Hint         : 794
Name         : PyType_Type
我假设这意味着该符号仅在DLL中可用,而完全静态链接是不可能的


我尝试将DLL放入
srcs
,但似乎这些DLL只直接传递给链接器。

不要使用
srcs
,而是使用
linkopts

cc_library(
    ...
    linkopts = ["-Wl,python35.lib"],
)

请参阅。

我认为这不适用于以下三个原因:1
python35.lib
不在系统中,而是源文件2
python35.lib
只是一个导入库(对于示例libs不确定)和3。为了将
-Wl,$(location libs/python35.lib)
添加到
linkopts
中,我需要将该文件指定为一个依赖项,我不知道该依赖项是如何添加的。为这个问题添加了更多细节。0.4.4的解决方法(由提供):
linkopts=[“-Lexternal/org\u python/libs/”,“-Wl,python35.lib”]
似乎不再适用于0.5.1。嗯,我认为您原来的规则应该适用。你的BAZEL_PYTHON指向哪里?因为,在中,我们将它的
include
libs
路径添加到
include
LIB
环境变量。它是否与libs/python35.lib所属的python相同?你能和我分享一下你的示例项目吗?这样我就可以重现错误了。所以我现在让BAZEL_PYTHON
指向与
libs/python35.lib
相同的安装,但它仍然不起作用。我试图生成一个最小的测试用例。