Czy mogę prosić o wyjaśnienie dlaczego pojawia sie SIGSEGV na platformie Linux ?
Wyjątek jest zanim uruchomi się main, minimalny kawałek kodu który powoduje wyjątek
#include <cstdio>
#include <ftd2xx.h>
// /** @{
// * @name FT_STATUS
// * @details Return status values for API calls.
// */
// typedef ULONG FT_STATUS;
FT_STATUS stat;
int main()
{
printf("main\n");
FT_HANDLE m_dev_handle;
FT_Close(m_dev_handle);
}
Warunki konieczne aby pojawił się wyjątek:
-
-lftd2xx
, nie ma znaczenia czy biblioteka jest statyczna czy dynamiczna -
#include <ftd2xx.h>
- użycie w kodzie dowolnej funkcji z biblioteki ftd2xx FT_***
- zadeklarowanie globalnej zmiennej typu
FT_STATUS
Dlaczego zadeklarowana globalna zmienna która nawet nie jest używana powoduje wyjątek szczególnie że jest to typ prosty ULONG
?
Zastanawia mnie co się zmienia pomiędzy wersjami w kontekście biblioteki że jedna wersja nie działa:
// ta wersja nie dziala
FT_STATUS stat;
int main()
{
a taka wersja działa
int main()
{
FT_STATUS stat;