小编Seb*_*020的帖子

导入库如何工作以及为什么MinGW不需要它们?

我查看了这个页面:深入了解Win32可移植可执行文件格式

它解释了链接器需要一个导入库,因为编译器无法区分正常函数调用和API函数调用.但是他们也说__declspec(dllimport)将函数调用指定为API调用,以便链接器链接.但是使用此关键字,编译器应该知道这是对API函数的调用.__imp_[function-name]

为什么链接器仍然需要导入库?编译器可以通过预先添加__imp_到函数名称来标记此符号,并且可以调用函数指针(这是一个尚未解析的符号),并且链接器可以替换此符号(因为它看到这是一个API调用) IAT条目的地址.

为什么MinGW-linker直接使用"MinGW-DLLs",但Visual-Studio链接器需要导入库?

在我阅读帖子时,还提出了一些其他问题.在完成与最终可执行文件的链接之前,"dlltool(或链接器)"(无论哪个创建导入库)如何知道IAT条目的位置?我认为IAT条目将在链接时与最终可执行文件一起构建.帖子说,每个API-Call在IAT表中都有一个固定的位置,从不介意将链接多少个DLL.我无法想象如何实现这一目标.

c c++ windows dll linker

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

Apache与Docker Alpine Linux

我想用alpine和apache创建一个docker图像.我使用tini作为"init"系统.它工作,直到我分离并重新连接到容器.连接到容器后,apache退出并且容器停止.我不知道问题是什么.有没有人与docker,alpine和apache有类似的问题?

我的Dockerfile看起来像这样(之前,我使用Alpines包管理器进行tini)

FROM alpine
ENV TINI_VERSION v0.16.1
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /sbin/tini
RUN chmod +x /sbin/tini
RUN apk add --no-cache apache2 \
   && mkdir -p /run/apache2 \
   && ln -sf /dev/stdout /var/log/apache2/access.log \
   && ln -sf /dev/stderr /var/log/apache2/error.log
EXPOSE 80
ENTRYPOINT ["/sbin/tini", "-vvv", "-g", "--"]
CMD ["/usr/sbin/httpd", "-f", "/etc/apache2/httpd.conf", "-DFOREGROUND"]
Run Code Online (Sandbox Code Playgroud)

输入和输出到docker cli:

~/Desktop/docker_test@laptop-sebi
$ docker run -itd test1
a793bad5d4350f58893909f1552c9f2978d8e2952960ac667f8dcb2bf7a3516e

~/Desktop/docker_test@laptop-sebi
$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             
STATUS              PORTS               NAMES
a793bad5d435        test1               "/sbin/tini -vvv -..."   12 seconds 
ago …
Run Code Online (Sandbox Code Playgroud)

apache init docker dockerfile

6
推荐指数
1
解决办法
2643
查看次数

gpg2:如何使用另一个秘密和公钥环?

我知道 gpg2 使用 gpg-agent 来获取私钥。默认情况下,它们存储在~/.gnupg/private-keys-v1.d.

现在我问自己是否可以指示 gpg 在另一台机器上使用另一个代理?该文档不是很有帮助,因为它没有解释如何将您的 gpg 连接到另一个 gpg-agent。但由于 gpg2 要求您使用 gpg-agent,因此没有其他方法可以使用新的密钥环。

我的第二个问题是,是否可以指示 gpg-agent 使用默认目录以外的另一个目录private-keys-v1.d来查找密钥?

gpg2 的文档也不包含指定新公钥环的选项。尽管文档中不再提及,它仍然可用吗?

问候 Sebi2020

configuration gnupg gpg-agent

6
推荐指数
1
解决办法
5578
查看次数

Python 函数胶囊

我在 python 2.7.5 的帮助下找到了这个代码片段,这是一个关于将 C-API 暴露给其他模块的章节,在用 C 和 C++ 扩展 Python 部分:为扩展模块提供 C API

/* C API functions */
#define PySpam_System_NUM 0
#define PySpam_System_RETURN int
#define PySpam_System_PROTO (const char *command)
// ...
static PySpam_System_RETURN PySpam_System PySpam_System_PROTO;
// ...
static void **PySpam_API;

#define PySpam_System \
(*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM])
Run Code Online (Sandbox Code Playgroud)

这段代码是针对函数胶囊的。胶囊用于在两个模块之间传递函数。但是这个片段的含义是什么:[...] (PySpam_SystemRETURN (*)PySpam_System_PROTO) [...]. 我认为这有点像静态演员。类似的东西(int(*)(char s))。但是这个结构的意义是什么?

c python python-c-api python-extensions

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

Windows 如何知道文件是否是从 Internet 下载的?

如果我在 Windows 中打开一个文件,该文件是由 chrome 或其他浏览器下载的,Windows 会弹出警告,表明该文件是从 Internet 下载的。在 Microsoft Word 中打开的文档也是如此。

但是windows怎么知道这个文件来自Internet呢?我认为它与我硬盘上的所有其他文件都是同一个文件。它与文件属性有关吗?

windows google-chrome file download

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

Gitlab-CI:如果作业 A 失败,指定作业 C 应在作业 B 之后运行

假设您有以下管道:

Job A (deploy) -> Job B (test) -> Job C (remove test deployment)
Run Code Online (Sandbox Code Playgroud)

管道应部署测试映像并在成功部署后对其进行测试。测试后,我想运行一个清理脚本,不管测试输出如何,但前提是测试映像(作业 A)已部署。

总结一下:我希望 Gitlab 只有在 Job A 成功时才执行 Job C ,但在 Job B 之后

行不通的事情:

  • when: on-failure (作业 A 或作业 B 可能失败,但只有作业 A 重要)
  • when: always (也许作业 A 失败导致作业 C 失败)
  • when: on-success (要求所有工作都成功)

我知道 GitLab 有一个名为 DAG Pipelines 的功能,它允许您使用needs关键字指定对其他作业的多个依赖项,但遗憾的when是,该关键字始终适用于所有先前的作业。所以你不能说这样的话:

Job A (deploy) -> Job B (test) -> Job C (remove test deployment)
Run Code Online (Sandbox Code Playgroud)

我错过了什么还是没有办法实现这种行为?

gitlab gitlab-ci

5
推荐指数
2
解决办法
4727
查看次数

如何构建其依赖项依赖于项目依赖项的另一个版本的项目

想象一下您有一个项目需要两个模块AB。我将调用项目模块P。可以说,这P需要A v1.0.0B v1.1.0A需要B v1.0.0。此外,B没有遵守语义版本控制规则,因此版本更改v1.0.0 -> v1.1.0引入了破坏性 API 更改。因此 P,仅使用 构建并且v1.1.0A使用 构建v1.0.0

依赖关系图:

P -> A (v1.0.0) -> B(v1.0.0)
P -> B (v1.1.0)
Run Code Online (Sandbox Code Playgroud)

有没有办法用不同的版本构建这个项目。我听说过供应商,但我不确定这是否会导致依赖项使用不同的B模块版本。

如果它可以为冲突的包版本提供解决方案,那么如果依赖项在其 git 存储库中不包含供应商文件夹(有些人说,您不应该上传供应商文件夹),那么 go 工具是否可以使用供应商识别模块(在此case 模块A不附带供应商文件夹,但开发人员在go mod vendor本地调用),go get 命令是否尊重依赖项的供应商文件夹(或者它是否可以检测到模块使用了供应商而没有上游供应商文件夹)?

go dependency-management vendoring go-modules

2
推荐指数
1
解决办法
1193
查看次数