Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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
c库在c+中是静态的吗+;节目? 我有一个C LIB,alg.LIB,我需要在C++程序中调用。我意识到ALGO.LIB中的变量是静态的,这会给我的C++程序带来问题,当我多次调用alg.LIB时,或者使用线程同时调用ALGO.LIB。_C++_C_Static Libraries - Fatal编程技术网

c库在c+中是静态的吗+;节目? 我有一个C LIB,alg.LIB,我需要在C++程序中调用。我意识到ALGO.LIB中的变量是静态的,这会给我的C++程序带来问题,当我多次调用alg.LIB时,或者使用线程同时调用ALGO.LIB。

c库在c+中是静态的吗+;节目? 我有一个C LIB,alg.LIB,我需要在C++程序中调用。我意识到ALGO.LIB中的变量是静态的,这会给我的C++程序带来问题,当我多次调用alg.LIB时,或者使用线程同时调用ALGO.LIB。,c++,c,static-libraries,C++,C,Static Libraries,例如,在algo.lib中,有一个inta,其初始值设置为0。当我第一次调用algo.lib时,a将被设置为1000。但是当我再次调用algo.lib时,我希望algo.lib中的变量处于初始状态,即a=0,而不是a=1000 有没有可能使algo.lib成为面向对象的,这样当我调用它的函数时,它被创建为一个对象,并被设置为初始状态?运行完algo.lib后,该对象将被销毁?是的,这是可能的。如果你重写它。如果只有二进制文件,则无法更改此行为。您可以通过创建一个单独的可执行文件来解决这个问题,该

例如,在algo.lib中,有一个
inta
,其初始值设置为0。当我第一次调用algo.lib时,a将被设置为1000。但是当我再次调用algo.lib时,我希望algo.lib中的变量处于初始状态,即a=0,而不是a=1000


有没有可能使algo.lib成为面向对象的,这样当我调用它的函数时,它被创建为一个对象,并被设置为初始状态?运行完algo.lib后,该对象将被销毁?

是的,这是可能的。如果你重写它。如果只有二进制文件,则无法更改此行为。您可以通过创建一个单独的可执行文件来解决这个问题,该文件将执行您想要的操作,然后退出,并通过一些IPC将结果传递回主程序。基本上-用您自己的实现包装它,它将有效地为每个单独的调用初始化库。

重写将非常繁琐和耗时,因为这个algo.lib属于其他人。谢谢你的建议,我想我会编译alg.LIB作为一个可替代的,并调用它在我的C++程序,也许使用PONEN()不需要。只需编写自己的API即可正确初始化现有库,和/或将其函数包装在自己的API中。调用新的API而不是旧的API
popen()
太过分了。@spraff,我不确定你是对的。OP在库中有一个全局变量,每次调用时都会更改该变量,显然,一旦加载它就无法重置,并且从外部无法访问该变量。如果是这样的话,仅仅包装API是没有帮助的。