SCons 链接 DLL 导致依赖循环 lib.capp.cS构造

问题描述

这是我的图书馆的一个最小例子。我有一个库 lib.c 和一个使用该库的应用程序 app.c。我正在使用 Scons 来编译 lib 和应用程序。 (脚本如下)

  • 最初,我使用 lib = env.Library(...) 将 lib 编译为静态库,并将库附加到 env env.Prepend(LIBS=[lib]) 编译应用程序 env.Program(...),一切正常,没有依赖项错误。
  • 现在我尝试将我的库编译为共享库。我添加了 __declspec(dllxxxx) 并使用 lib = env.SharedLibrary(...) 编译库,并且在将库附加到 env 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')

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)