【发布时间】:2021-05-01 00:52:06
【问题描述】:
这是我的库的一个最小示例。我有一个库lib.c 和一个使用该库的应用程序app.c。我正在使用Scons 来编译库和应用程序。 (脚本如下)
- 最初,我使用
lib = env.Library(...)将库编译为静态库,并将库附加到环境env.Prepend(LIBS=[lib])编译应用程序env.Program(...),一切正常,没有依赖错误。 - 现在我尝试将我的库编译为共享库。我添加了
__declspec(dllxxxx)并使用lib = env.SharedLibrary(...)编译库,就像在将库附加到环境env.Prepend(LIBS=[lib])之前编译应用程序env.Program(...)一样,现在我得到了这个依赖错误
scons: *** Found dependency cycle(s):
lib.dll -> lib.lib -> lib.exp -> lib.dll
lib.lib -> lib.lib
lib.exp -> lib.lib -> lib.exp
我做错了什么,如何解决?
lib.c
__declspec(dllexport) int add(int a, int b);
int add(int a, int b) {
return a + b;
}
app.c
#include<stdio.h>
__declspec(dllimport) int add(int a, int b);
int main() {
printf("%i\n", add(1, 2));
return 0;
}
S构造
import os
env = DefaultEnvironment(TARGET_ARCH = 'x86_64')
os.environ['PATH'] = env['ENV']['PATH'] ## for "cl.exe"
lib = env.SharedLibrary(
target = 'lib',
source = 'lib.c')
env.Prepend(LIBS=[lib])
env.Program(
target = 'app',
source = 'app.c')
【问题讨论】:
-
为什么要这样做 "os.environ['PATH'] = env['ENV']['PATH'] ## for "cl.exe" "... 应该不需要?请在上面的描述中添加您正在使用的 msvc 版本、python 版本以及 SCons 版本。
-
我可以重现这个,但是发生了一些非常奇怪的事情。即使退回到
Library而不是SharedLibrary,我也会在输出中看到一条意外的行:Creating library app.lib and object app.exp。为什么会这样做? -
@bdbaddog 我正在使用 VS2019 和 python 3.7 。 scons 似乎没有找到与this question 类似的
cl.exe案例,如果您知道更好的方法,请告诉我 -
我使用的是 Scons v4.0.1
-
SCons 应该在没有它的情况下找到它。请按照我在其他问题中的帖子执行此操作并附上结果.. set SCONS_MSCOMMON_DEBUG=%TEMP%\SCONS_MSVS_DEBUG.log 这将输出有关 SCons 如何尝试查找 MSVC 的信息,以便我们找出失败的原因。