小编Nat*_*iel的帖子

CMake 静态库依赖项不使用 ExternalProject_Add 传播

我目前正在尝试让可执行文件与它需要的所有依赖项正确链接。

这是依赖项的示例结构:

exe -> libA -> libB
Run Code Online (Sandbox Code Playgroud)

exelibA拥有自己的存储库。exe拉入libA这样的东西:

add_executable(exe ${sources})

ExternalProject_Add(
    libA
    GIT_REPOSITORY http://some/git/url/libA.git
    ...
)

target_include_directories(exe PRIVATE ${libA_includes})
target_link_libraries(exe ${libA_libs}/libA.a)

add_dependencies(exe libA)
Run Code Online (Sandbox Code Playgroud)

libAlibB以类似的方式拉入:

add_library(libA STATIC ${sources})

ExternalProject_Add(
    libB
    URL http://some/artifact/repo/libB.tgz
    ...
)

target_include_directories(libA PRIVATE ${libB_includes})
target_link_libraries(libA ${libB_libs}/libB.a)

add_dependencies(libA libB)
Run Code Online (Sandbox Code Playgroud)

我可以libA很好地构建,以及正确链接到libB. 但是,当我尝试构建时exe,它只链接到libA而不是libB. 我怎样才能让 CMake 知道之间的依赖libAlibB不应该通过 ExternalProject 丢失?

编辑:

我创建了一些依赖关系图,希望能阐明我想要的:

实际的:

exe实际 libA 实际

我的期望:

预期的

任何帮助将不胜感激。谢谢。

编辑2:

我最终使用以下作为解决方案:

在 libA 的 …

c linker cmake

5
推荐指数
1
解决办法
2384
查看次数

Python asyncio缓冲区和流程数据

我在asyncio事件循环中遇到了一些CPU密集型任务的问题.我在处理维护传入数据缓冲区和从中构建数据包时遇到的麻烦.我已经尝试使用执行程序来执行CPU绑定的东西,但是当从中删除数据包时,无法维护缓冲区的顺序.

我正在寻找一种最佳实践方法来实现以下功能,而无需在事件循环中执行CPU绑定任务.

import asyncio
import struct

class Reader(asyncio.Protocol):
    def __init__(self):
        self.extra = bytearray()

    def data_received(self, data):
        self.extra.extend(data)
        packet = get_packet(bytes(self.extra))
        if packet:
            del self.extra[:len(packet)]
            if verify_hash(packet):  # CPU intensive
                asyncio.async(distribute(packet))  # Some asyncio fan-out callback


def get_packet(data):  # CPU intensive
    if len(data) > HEADER_SIZE:
        payload_size, = struct.unpack_from(HEADER_FORMAT, data)
        if len(data) >= HEADER_SIZE + payload_size:
            return data[:HEADER_SIZE + payload_size]
    return None

loop = asyncio.get_event_loop()
loop.run_until_complete(loop.create_server(Reader, '0.0.0.0', 8000))
loop.run_forever()
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-asyncio

4
推荐指数
1
解决办法
2665
查看次数

标签 统计

c ×1

cmake ×1

linker ×1

python ×1

python-3.x ×1

python-asyncio ×1