• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

kompilacja biblioteki pdcurses i konfiguracja w code blocks Windows Mingw

Object Storage Arubacloud
0 głosów
504 wizyt
pytanie zadane 30 marca 2023 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
Witam,

Potrzebuje biblioteki PdCurses. Chciałem użyć MSYS do skompilowania mam pobrane pliki z repozytorium itd. Wykonał polecenia do zbudowania biblioteki, ale nie wiem co mam dalej zrobić żeby w code blocks wszystko działało.

 

Prośba o pomoc.

Z góry dzięki :)
komentarz 31 marca 2023 przez j23 Mędrzec (194,920 p.)

Czyli z readline nie dałeś rady?

komentarz 31 marca 2023 przez piotr_domanski Bywalec (2,080 p.)
Nie nie wiem co się dzieje
komentarz 31 marca 2023 przez j23 Mędrzec (194,920 p.)
To znaczy? Jeśli dobrze pamiętam, chciałem w poprzednim wątku, żebyś spróbował kompilować z poziomu terminala, wywołując bezpośrednio g++. Wątek się urwał. Teraz widzę, że jest nowy temat z podobnym problemem, tylko z inną biblioteką.

Nikt nie będzie w stanie Ci pomóc, jak będziesz kończyć wątek w połowie drogi.

Masz MSYS2. Zainstalowałeś w nim kompilatory i inne niezbędne rzeczy?
komentarz 31 marca 2023 przez piotr_domanski Bywalec (2,080 p.)
kompilator jest

Z MSYS:

 gcc --version
gcc (GCC) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

Chce zainstalować i skompilować bibliotekę tak żeby uzyskać bliki readline.lib i readline.a do linkowania w CODE BLCKS. Jak to zrobić.
komentarz 31 marca 2023 przez j23 Mędrzec (194,920 p.)
No a nie ma tej biblioteki w repozytorium? Zainstalowałeś ją?
komentarz 31 marca 2023 przez piotr_domanski Bywalec (2,080 p.)
edycja 31 marca 2023 przez piotr_domanski

Readline pobrałem komendą

pacman -S libreadline-devel
Mam takie pliki\

I co dalej

 

Mam testowy kod z readline w code blcoks:

#include <iostream>
#include <readline/readline.h>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    char* input = readline("Enter a command: ");

    return 0;
}

Ustawienia w code blocks:

BŁĄD:

||=== Build: Debug in readline tests (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Users\Piotr.MARO2\Music\readline tests\main.cpp|9|undefined reference to `readline'|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 

 

REDLINE JEST:

pacman -Qs readline


local/libreadline 8.2.001-3 (libraries)
    GNU readline library
local/libreadline-devel 8.2.001-3 (development)
    readline headers and libraries
local/mingw-w64-x86_64-readline 8.2.001-6
    MinGW port of readline for editing typed command lines (mingw-w64)
local/perl 5.36.0-1
    A highly capable, feature-rich programming language
 

 

komentarz 31 marca 2023 przez j23 Mędrzec (194,920 p.)

No i teraz zrób to, co pisałem w poprzednim wątku: skompiluj kod, który tam podałeś, wywołując: g++ -lreadline -o app.exe main.cpp && ./app.exe

Plik main.cpp umieść w katalogu domowym z MSYS2, przejdź do niego w terminalu komendą cd ~ no i próbuj.

Jeśli się skompiluje i uruchomi, to można będzie próbować z C::B.

komentarz 31 marca 2023 przez piotr_domanski Bywalec (2,080 p.)

mam coś takiego

 g++ -lreadline -o app.exe main.cpp && ./app.exe
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: /tmp/ccoFZvuJ.o:main.cpp:(.text+0x43): undefined reference to `readline'
collect2: error: ld returned 1 exit status

main.cpp

#include <iostream>
#include <readline/readline.h>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    char* input = readline("Enter a command: ");

    return 0;
}

komentarz 31 marca 2023 przez piotr_domanski Bywalec (2,080 p.)
poszło

 g++ -o app.exe main.cpp -L/usr/lib -lreadline && ./app.exe
Hello world!
Enter a command: d
komentarz 31 marca 2023 przez piotr_domanski Bywalec (2,080 p.)
Co mam zrobić żeby w CB działało.
komentarz 31 marca 2023 przez j23 Mędrzec (194,920 p.)

Włącz C::B, Settings ► Compiller ► Toolchain executables ► ... i wybierz katalog mingw z MSYS2.

Jak poprawnie wykryje kompilator, konsolidator i inne, stwórz nowy projekt, dodaj bibliotekę i skompiluj.

komentarz 1 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)

Tu mam to zmienić

komentarz 1 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Tak, tam masz obok przycisk ..., gdzie możesz ustawić ścieżkę do innego kompilatora.

komentarz 1 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
a co mam zrobić żeby zbudować bibliotekę pdcurses w msys, to mi już działa z tym readline
komentarz 1 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Sprawdzałeś, czy nie ma w repozytorium tej biblioteki?

Jeśli nie ma, wejdź w terminalu MSYS2 do katalogu <PDCurses>/wincon i wykonaj komendę make, a później - jeśli się skompiluje - make install.

komentarz 1 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
Piotr@maro2 MSYS /d/C/PDCurses-3.9/PDCurses-3.9/wincon
# make
make: Nothing to be done for 'all'.
komentarz 1 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Spróbuj

make clean
make

Ewentualnie: make -f Makefile

komentarz 2 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
Piotr@maro2 MSYS /d/C/PDCurses-3.9/PDCurses-3.9/wincon
# make clean
cmd /c del *.o
Microsoft Windows [Version 10.0.22000.978]
(c) Microsoft Corporation. Wszelkie prawa zastrzeżone.

D:\C\PDCurses-3.9\PDCurses-3.9\wincon>make
make[1]: Entering directory '/d/C/PDCurses-3.9/PDCurses-3.9/wincon'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/d/C/PDCurses-3.9/PDCurses-3.9/wincon'

D:\C\PDCurses-3.9\PDCurses-3.9\wincon>make -f Makefile
make[1]: Entering directory '/d/C/PDCurses-3.9/PDCurses-3.9/wincon'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/d/C/PDCurses-3.9/PDCurses-3.9/wincon'

D:\C\PDCurses-3.9\PDCurses-3.9\wincon>
komentarz 2 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Spróbuj może tak: mingw32-make -f Makefile

Może problem polega na tym, że ten makefile był pisany specjalnie dla MinGW, a make z MSYS2 to port Linuksowego build systemu. Między nimi są drobne różnicę.

komentarz 2 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
nic nie idzie ,mam kilka plików make file nie wiem do którego wejść. Mam pytanie, jeśli znajdziesz czas i masz Discorda, mógłbyś szybko zerknąć na moje pliki w tej bibliotece i wtedy będzie szybciej bo tak to kręcimy się w kółko już nie mam siły tego tak instalować i tak kombinować. Na Discordzie będzie szybciej. Jeśli oczywiście chcesz, nie ukrywam że mi łatwiej będzie. Jeśli się zgodzisz to bardzo dziękuje Ci za to :).
komentarz 2 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

mam kilka plików make file nie wiem do którego wejść.

Masz tam plik readme, i tam jest wszystko opisane. Makefile bez żadnego rozszerzenia jest dla MinGW.

mógłbyś szybko zerknąć na moje pliki w tej bibliotece

Ściągnąłem sobie z gita ;) Problem jest taki, że siedzę teraz na Linuksie i nie mogę ... chociaż spróbuje zainstalować MSYS2 na wine ;)

Jeśli chodzi o Discorda, niby mam tam jakieś konto, ale nie wchodziłem w to głębiej, no i raczej wolę kontakt przez forum.

komentarz 2 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
okej rozumiem to będę Ci wysyłał w razie czego screeny z moich komunikatów itd. Dzięki że mi pomagasz. :)
komentarz 2 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)

mam takie kod z pdcurses

#include <iostream>
#include <curses.h>

using namespace std;

int main() {
    // Inicjalizacja biblioteki PDCurses
    initscr();
    // Wyświetlenie tekstu w oknie
    printw("Hello, world!");
    // Wyświetlenie okna
    refresh();
    // Oczekiwanie na wciśnięcie dowolnego klawisza
    getch();
    // Zakończenie działania biblioteki PDCurses
    endwin();

    return 0;
}

Błędy:

||=== Build: Debug in pdcurses tests (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|8|undefined reference to `initscr'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|10|undefined reference to `printw'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|12|undefined reference to `refresh'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|14|undefined reference to `stdscr'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|14|undefined reference to `wgetch'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|16|undefined reference to `endwin'|
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\libstdc++.a(locale_init.o):locale_init.cc|| undefined reference to `pthread_mutex_destroy'|
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\libstdc++.a(locale_init.o):locale_init.cc|| undefined reference to `pthread_mutex_init'|
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\libstdc++.a(locale_init.o):locale_init.cc|| undefined reference to `pthread_once'|
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\libstdc++.a(locale_init.o):locale_init.cc|| undefined reference to `pthread_mutex_lock'|
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\libstdc++.a(locale_init.o):locale_init.cc|| undefined reference to `pthread_mutex_unlock'|
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\libstdc++.a(locale_init.o):locale_init.cc|| undefined reference to `pthread_mutex_lock'|
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\5.1.0\libstdc++.a(locale_init.o):locale_init.cc|| undefined reference to `pthread_mutex_unlock'|
||error: ld returned 1 exit status|
||=== Build failed: 14 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 

komentarz 2 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)

treaz mam taki błąd

C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\mingw32\bits\gthr-default.h|694|error: 'sched_yield' was not declared in this scope|

 

 

w tym kawałku kodzie z plików:

static inline int
__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
		  void *__args)
{
  return __gthrw_(pthread_create) (__threadid, NULL, __func, __args);
}

static inline int
__gthread_join (__gthread_t __threadid, void **__value_ptr)
{
  return __gthrw_(pthread_join) (__threadid, __value_ptr);
}

static inline int
__gthread_detach (__gthread_t __threadid)
{
  return __gthrw_(pthread_detach) (__threadid);
}

static inline int
__gthread_equal (__gthread_t __t1, __gthread_t __t2)
{
  return __gthrw_(pthread_equal) (__t1, __t2);
}

static inline __gthread_t
__gthread_self (void)
{
  return __gthrw_(pthread_self) ();
}

static inline int
__gthread_yield (void)
{
  return __gthrw_(sched_yield) ();
}

static inline int
__gthread_once (__gthread_once_t *__once, void (*__func) (void))
{
  if (__gthread_active_p ())
    return __gthrw_(pthread_once) (__once, __func);
  else
    return -1;
}

static inline int
__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
{
  return __gthrw_(pthread_key_create) (__key, __dtor);
}

static inline int
__gthread_key_delete (__gthread_key_t __key)
{
  return __gthrw_(pthread_key_delete) (__key);
}

static inline void *
__gthread_getspecific (__gthread_key_t __key)
{
  return __gthrw_(pthread_getspecific) (__key);
}

static inline int
__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
{
  return __gthrw_(pthread_setspecific) (__key, __ptr);
}

static inline void
__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    __gthrw_(pthread_mutex_init) (__mutex, NULL);
}

static inline int
__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return __gthrw_(pthread_mutex_destroy) (__mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_lock (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return __gthrw_(pthread_mutex_lock) (__mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return __gthrw_(pthread_mutex_trylock) (__mutex);
  else
    return 0;
}

#if _GTHREAD_USE_MUTEX_TIMEDLOCK
static inline int
__gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
			   const __gthread_time_t *__abs_timeout)
{
  if (__gthread_active_p ())
    return __gthrw_(pthread_mutex_timedlock) (__mutex, __abs_timeout);
  else
    return 0;
}
#endif

static inline int
__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return __gthrw_(pthread_mutex_unlock) (__mutex);
  else
    return 0;
}

#if !defined( PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) \
  || defined(_GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC)
static inline int
__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    {
      pthread_mutexattr_t __attr;
      int __r;

      __r = __gthrw_(pthread_mutexattr_init) (&__attr);
      if (!__r)
	__r = __gthrw_(pthread_mutexattr_settype) (&__attr,
						   PTHREAD_MUTEX_RECURSIVE);
      if (!__r)
	__r = __gthrw_(pthread_mutex_init) (__mutex, &__attr);
      if (!__r)
	__r = __gthrw_(pthread_mutexattr_destroy) (&__attr);
      return __r;
    }
  return 0;
}
#endif

static inline int
__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_lock (__mutex);
}

static inline int
__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_trylock (__mutex);
}

#if _GTHREAD_USE_MUTEX_TIMEDLOCK
static inline int
__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
				     const __gthread_time_t *__abs_timeout)
{
  return __gthread_mutex_timedlock (__mutex, __abs_timeout);
}
#endif

static inline int
__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_unlock (__mutex);
}

static inline int
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_destroy (__mutex);
}

#ifdef _GTHREAD_USE_COND_INIT_FUNC
static inline void
__gthread_cond_init_function (__gthread_cond_t *__cond)
{
  if (__gthread_active_p ())
    __gthrw_(pthread_cond_init) (__cond, NULL);
}
#endif

static inline int
__gthread_cond_broadcast (__gthread_cond_t *__cond)
{
  return __gthrw_(pthread_cond_broadcast) (__cond);
}

static inline int
__gthread_cond_signal (__gthread_cond_t *__cond)
{
  return __gthrw_(pthread_cond_signal) (__cond);
}

static inline int
__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
{
  return __gthrw_(pthread_cond_wait) (__cond, __mutex);
}

static inline int
__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
			  const __gthread_time_t *__abs_timeout)
{
  return __gthrw_(pthread_cond_timedwait) (__cond, __mutex, __abs_timeout);
}

static inline int
__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
			       __gthread_recursive_mutex_t *__mutex)
{
  return __gthread_cond_wait (__cond, __mutex);
}

static inline int
__gthread_cond_destroy (__gthread_cond_t* __cond)
{
  return __gthrw_(pthread_cond_destroy) (__cond);
}

 

komentarz 2 kwietnia 2023 przez j23 Mędrzec (194,920 p.)
Dobra, na Wine nie da się tego uruchomić (bez tracenia dnia lub więcej). Później na Windowsie sprawdzę.

Co do logów, to nie ma sensu ich dawać, jeśli nie skompilowałeś i zainstalowałeś biblioteki.
komentarz 2 kwietnia 2023 przez j23 Mędrzec (194,920 p.)
edycja 3 kwietnia 2023 przez j23

Ok, sprawdziłem na Windowsie i nie wiem, co Ty tam robiłeś, bo u mnie kompilacja biblioteki przeszła bez najmniejszych problemów. Może źródła wziąłeś z dziwnego miejsca. Spróbuj tak:

git clone https://github.com/wmcbrine/PDCurses.git
cd PDCurses/winconn
make

Jeśli dalej nic, tu masz skompilowaną bibliotekę -> link (plik .a powinien być statyczną biblioteką, chyba że przy kompilacji do .dll zrobiła się biblioteką importów).

komentarz 2 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)

błędy w code blocks

||=== Build: Debug in 123 (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Users\Piotr.MARO2\Music\123\main.cpp|5|undefined reference to `initscr'|
C:\Users\Piotr.MARO2\Music\123\main.cpp|6|undefined reference to `printw'|
C:\Users\Piotr.MARO2\Music\123\main.cpp|7|undefined reference to `refresh'|
C:\Users\Piotr.MARO2\Music\123\main.cpp|8|undefined reference to `stdscr'|
C:\Users\Piotr.MARO2\Music\123\main.cpp|8|undefined reference to `wgetch'|
C:\Users\Piotr.MARO2\Music\123\main.cpp|9|undefined reference to `endwin'|
||error: ld returned 1 exit status|
||=== Build failed: 7 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 

#include <curses.h>

int main()
{
    initscr();
    printw("HELLO WORLD \n");
    refresh();
    getch();
    endwin();
    return 0;
}

komentarz 2 kwietnia 2023 przez j23 Mędrzec (194,920 p.)
Tak jak poprzednio spróbuj skompilować ten plik z terminala.
komentarz 2 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
a jaką komendą w msys?
komentarz 2 kwietnia 2023 przez j23 Mędrzec (194,920 p.)
gcc -L<katalog z pdcurses.a>\ -I<PDCurses> -lpdcurses -o app.exe main.c && ./app.exe

<PDCurses> to katalog gdzie leży curses.h.

komentarz 4 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)

Jest błąd w msys:

 

# gcc -L</home/pdcurses/pdcurses>\ -I</home/pdcurses/PDCurses-3.8> -lpdcurses -o app.exe main.cpp && ./app.exe
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: app.exe: in function `mainCRTStartup':
/c/S/msys2-runtime/src/msys2-runtime/winsup/cygwin/crt0.c:20: multiple definition of `mainCRTStartup'; /usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../lib/crt0.o:/c/S/msys2-runtime/src/msys2-runtime/winsup/cygwin/crt0.c:20: first defined here
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: app.exe: in function `mainCRTStartup':
/c/S/msys2-runtime/src/msys2-runtime/winsup/cygwin/crt0.c:20: multiple definition of `WinMainCRTStartup'; /usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../lib/crt0.o:/c/S/msys2-runtime/src/msys2-runtime/winsup/cygwin/crt0.c:20: first defined here
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: app.exe:cygming-crtbeg:(.text+0x50): multiple definition of `__gcc_register_frame'; /usr/lib/gcc/x86_64-pc-msys/11.3.0/crtbegin.o:cygming-crtbeg:(.text+0x0): first defined here
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: app.exe:cygming-crtbeg:(.text+0x70): multiple definition of `__gcc_deregister_frame'; /usr/lib/gcc/x86_64-pc-msys/11.3.0/crtbegin.o:cygming-crtbeg:(.text+0x20): first defined here
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: app.exe:cygming-crtbeg:(.data+0x0): multiple definition of `__dso_handle'; /usr/lib/gcc/x86_64-pc-msys/11.3.0/crtbegin.o:cygming-crtbeg:(.data+0x0): first defined here
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: app.exe:crt0.c:(.idata+0x120): multiple definition of `__imp_stdscr'; app.exe:crt0.c:(.idata+0x120): first defined here
/usr/lib/gcc/x86_64-pc-msys/11.3.0/../../../../x86_64-pc-msys/bin/ld: /tmp/ccoxdkS0.o:main.cpp:(.text+0x0): multiple definition of `main'; app.exe:main.cpp:(.text+0x80): first defined here
collect2: error: ld returned 1 exit status
 

komentarz 4 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Dodaj opcję -Wl,--whole-archive przed -lpdcurses. Może pójdzie (choć nie jest to zbyt eleganckie rozwiązanie).

W sumie mogłem sprawdzić tę bibliotekę i u siebie po kompilacji...

 

komentarz 4 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
nic, to samo
komentarz 4 kwietnia 2023 przez j23 Mędrzec (194,920 p.)
Prawdopodobnie problem leży w tym, że gcc, na którym kompilowałem bibliotekę, jest starszy od tego, który ty masz. Użyłem Msys2, który kiedyś tam instalowałem, wprawdzie zrobiłem update, ale coś kompilator nie chciał się z update'ować. A że biblioteka jest napisana w C, to uznałem, że nie będzie problemów z kompatybilnością...

Pewnie trzeba było zrobić pełną reinstalację środowiska.

Jutro zobaczę.
komentarz 6 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Dobra. Zainstalowałem najnowszą wersję MSYS2, skompilowałem bibliotekę (żadnych problemów), skompilowałem przykładowy program i odpaliłem - też żadnych problemów (kompilator gcc 12.2). Biblioteka DLL nie załącza jakichś nietypowych bibliotek środowiska poza systemowymi, więc nie powinno być problemów z użyciem jej nawet na innej wersji kompilatora.

W paczce są dwa pliki pdcurses.a. Ten w katalogu DLL został wygenerowany przy kompilacji z opcją DLL=Y, drugi plik bez żadnych opcji. Różnią się wielkością, więc niewykluczone, że ta w głównym katalogu jest biblioteką statyczną - musisz sobie to sprawdzić.

link

komentarz 6 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
ja mam kompilator gcc 11.3.0, powinno zadziałać
komentarz 6 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
w msys działa, teraz jak to zrobić w code blocks
komentarz 6 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)

Mam błędy :

#include <iostream>
#include <curses.h>

using namespace std;

int main() {
    // Inicjalizacja biblioteki PDCurses
    initscr();
    // Wyœwietlenie tekstu w oknie
    printw("Hello, world!");
    // Wyœwietlenie okna
    refresh();
    // Oczekiwanie na wciœniêcie dowolnego klawisza
    getch();
    // Zakoñczenie dzia³ania biblioteki PDCurses
    endwin();

    return 0;
}

||=== Build: Debug in pdcurses tests (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|8|undefined reference to `initscr'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|10|undefined reference to `printw'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|12|undefined reference to `refresh'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|14|undefined reference to `stdscr'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|14|undefined reference to `wgetch'|
C:\Users\Piotr.MARO2\Music\pdcurses tests\main.cpp|16|undefined reference to `endwin'|
||error: ld returned 1 exit status|
||=== Build failed: 7 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 

I teraz który plik pdcurses.a mam użyć w code blocks

komentarz 6 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Użyj tego z katalogu dll. Plik pdcurses.dll skopiuj do katalogu z exe, bo program się nie uruchomi.

komentarz 6 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
dalej nic to samo
komentarz 6 kwietnia 2023 przez j23 Mędrzec (194,920 p.)
Przestawiłeś kompilator na MSYS2?
komentarz 6 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
w code blocks mam ten sam co w msys
komentarz 6 kwietnia 2023 przez j23 Mędrzec (194,920 p.)

Idzie jak po grudzie ;/

Wyczyść projekt opcję Build ► Clean i próbuj.

komentarz 11 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
dalej to samo, próbuje już od kilku dni. Nic nie działa. Może Ty spróbuj w code blocks i zobacz czy jest ok.
komentarz 11 kwietnia 2023 przez piotr_domanski Bywalec (2,080 p.)
działa, udało mi się skompilować w cmd za pomocą mojego kompilatora code blocks. Msys mam źle skonfigurowane dlatego mi coś nie szło. Dzięki za pomoc, ale udało mi się w końcu.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 609 wizyt
pytanie zadane 29 marca 2019 w C i C++ przez Milo Obywatel (1,180 p.)
0 głosów
1 odpowiedź 370 wizyt
0 głosów
0 odpowiedzi 507 wizyt

92,615 zapytań

141,465 odpowiedzi

319,776 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...