我創建了一個包含c_mainwrapper的靜態庫(將其命名爲myStaticLib)。如果我創建一個測試應用程序,我可以毫無問題地調用函數MainControllerInitiate();
。調用c函數時出現分段錯誤
當我使用myStaticLib和c_wrapper創建共享庫時,我可以調用connectCreate();
而沒有任何問題。但是當我嘗試撥打MainControllerInitiate();
時,我收到了分段錯誤。
文件:
c_mainwrapper.h
(...)
typedef void* MainController_p;
extern MainController_p (*createMainController)()
#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif
EXTERNC void MainControllerInitiate();
(...)
#undef EXTERNC
(...)
c_mainwrapper.cpp
(...)
MainController_p (*createMainController)() = NULL;
(...)
void MainControllerInitiate()
{
if (createMainController != NULL)
{
createMainController();
}
}
(...)
c_wrapper.h
(...)
#include <c_mainwrapper.h>
#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif
EXTERNC void connectCreate();
(...)
#undef EXTERNC
(...)
c_wrapper.cpp
(...)
MainController_p createController()
{
return new MainController();
}
void connectCreate()
{
createMainController = &createController;
}
(...)
編輯:
的失敗的測試應用程序只是:
#include <c_wrapper>
int main(int argc, char *argv[])
{
connectCreate();
MainControllerInitiate(); // here the Segmentation fault occures
return 0;
}
EDIT2: 新增失蹤createMainController = NULL
派息你一步雖然它與調試器? – 2014-10-27 14:59:09
我錯過了'createMainController = NULL;' – Surt 2014-10-27 15:05:06
@MichaelWalz:是的,我可以通過connectCreate(),但是當它涉及到MainControllerInitiate()時,它會失敗。當我只使用靜態庫,我可以調用,並通過MainControllerInitiate()沒有任何問題。 – 2014-10-27 15:13:07