Scrivere un'applicazione che chiama un'altra applicazione per alcune attività: come funziona?

-4

Ho scritto un codice C ++ che chiama un risolutore chiamato CPLEX per risolvere un problema di ottimizzazione lineare intera (in Ubuntu 18.04). Ho tre serie di dati e uso il comando make per creare 3 excecutables per ognuno di essi. Quindi eseguo questi tre file eseguibili contemporaneamente.

La mia domanda è: il fatto che le librerie CPLEX siano utilizzate per creare file oggetto e l'eseguibile significa che gli script eseguibili utilizzeranno CPLEX nel tempo di esecuzione? In altre parole, sta chiamando CPLEX una procedura una tantum che è richiesta solo al momento della generazione degli eseguibili? In caso contrario, eseguire i tre programmi contemporaneamente potrebbe non funzionare o, se funziona, potrebbe influire sulle prestazioni perché desiderano utilizzare CPLEX contemporaneamente. È corretto? Che dire dell'utilizzo di CPLEX con un linguaggio di programmazione interpretato come Python? Non ho molta familiarità con i compilatori o gli interpreti, quindi una spiegazione generale su come funziona sarebbe apprezzata.

EDIT:

Il mio codice sorgente .cpp inizia con quanto segue:

#include <iostream>
#include <fstream>
#include <time.h>
#include <math.h>
#include <vector>
#include <random>
#include <algorithm>
#include <iomanip>
#include <string>
#include <stdlib.h>
#include <deque>
#include <ilcplex/ilocplex.h>
using namespace std ;

Quindi tutto ciò che faccio è aggiungere #include <ilcplex/ilocplex.h> al mio codice sorgente per poter usare le librerie CPLEX con il mio codice. In altre parole, il mio codice è solo un tipico codice C ++ che utilizza alcuni metodi aggiuntivi da CPLEX. Potrei fornire maggiori dettagli sull'utilizzo di CPLEX con il codice, ma penso che sia irrilevante qui e non contribuisce alla chiarezza della domanda. Per favore fatemi sapere se avete bisogno di ulteriori informazioni per comprendere la domanda.

Secondo questo link ,

When you compile a C++ application with a C++ library like CPLEX in Concert Technology, you need to tell your compiler where to find the CPLEX and Concert include files (that is, the header files), and you also need to tell the linker where to find the CPLEX and Concert libraries. The sample projects and makefiles illustrate how to carry out these crucial steps for the examples in the standard distribution. They use relative path names to indicate to the compiler where the header files are, and to the linker where the libraries are.

    
posta Opt 16.09.2018 - 11:37
fonte

1 risposta

2

Writing an application that calls another application for some tasks

In puro standard C ++ 11 (vedi n3337 ) da solo, non puoi farlo (perché lo standard non menziona nemmeno "altre applicazioni"). Si può usare nella pratica std :: system (ma si noti che lo standard C ++ 11 non definiamo veramente cosa std::system esattamente e concretamente fa, menziona solo alcuni processori di comandi). Su Linux, quella funzione (es. system (3) ) usa la shell standard /bin/sh per interpretare qualche comando di shell, e potresti avviare un altro processo in quel modo (dandogli una stringa appropriata). Ovviamente su altri sistemi operativi (ad esempio Windows) std::system si comporta in modo diverso (la sintassi e la semantica dei comandi è diversa, anche il nome delle applicazioni è diverso).

Su Linux, potresti anche usare popen (3) . Allora sei in grado, ad es. ottieni l'output di un comando.

In generale, ti interessano le sistema operativo strutture che offrono la possibilità di avviare processi e fare comunicazioni tra processi con loro. I dettagli sono ovviamente specifici per il sistema operativo e richiedono un intero libro da spiegare (quindi non ho spazio o tempo per fornire dettagli qui). Per Linux, leggi un buon libro di programmazione Linux, come il vecchio ALP (quindi leggi syscalls(2) )

È probabile che il tuo codice C ++ sia legato a un particolare sistema operativo (in concreto a Linux, quindi il tuo codice C ++ non sarà nemmeno compilare su Windows, e anche quando lo fa, ha vinto lavora come vuoi senza molte precauzioni da parte tua). Potresti essere interessato a framework come POCO o Qt fornendo un po 'di più o meno astrazioni comuni sopra questi sistemi operativi.

Potrebbe essere necessario trascorrere diverse settimane a leggere sui sistemi operativi. Raccomando il Sistema operativo: tre pezzi facili da manuale (liberamente scaricabile).

    
risposta data 16.09.2018 - 12:53
fonte

Leggi altre domande sui tag