【发布时间】:2013-11-22 04:55:00
【问题描述】:
尝试在 Linux 中使用 gcc 编译此 C++ 代码。它使用一个外部库/名为 SCIP 的应用程序。
我正在使用此代码进行编译:
gcc TestC.cpp -I./scipF/scip/src -L./scipF/scip/lib -l./scipF/scip/lib/libscip.a
但我收到此错误:
/usr/bin/ld: cannot find -l./scipF/scip/lib/libscip.a
该文件存在于文件夹中。不知道为什么它没有把它捡起来链接
#include <iostream>
#include "objscip/objscip.h"
#include "objscip/objscipdefplugins.h"
/** reads parameters */
static
SCIP_RETCODE readParams(
SCIP* scip, /**< SCIP data structure */
const char* filename /**< parameter file name, or NULL */
)
{
if( filename != NULL )
{
if( SCIPfileExists(filename))
{
std::cout << "reading parameter file <" << filename << ">" << std::endl;
SCIP_CALL( SCIPreadParams(scip, filename) );
}
else
std::cout << "parameter file <" << filename << "> not found - using default parameters" << std::endl;
}
else if( SCIPfileExists("scipmip.set") )
{
std::cout << "reading parameter file <scipmip.set>" << std::endl;
SCIP_CALL( SCIPreadParams(scip, "scipmip.set") );
}
return SCIP_OKAY;
}
/** starts SCIP */
static
SCIP_RETCODE fromCommandLine(
SCIP* scip, /**< SCIP data structure */
const char* filename /**< input file name */
)
{
/********************
* Problem Creation *
********************/
std::cout << std::endl << "read problem <" << filename << ">" << std::endl;
std::cout << "============" << std::endl << std::endl;
SCIP_CALL( SCIPreadProb(scip, filename, NULL) );
/*******************
* Problem Solving *
*******************/
/* solve problem */
std::cout << "solve problem" << std::endl;
std::cout << "=============" << std::endl;
SCIP_CALL( SCIPsolve(scip) );
std::cout << std::endl << "primal solution:" << std::endl;
std::cout << "================" << std::endl << std::endl;
SCIP_CALL( SCIPprintBestSol(scip, NULL, FALSE) );
/**************
* Statistics *
**************/
std::cout << std::endl << "Statistics" << std::endl;
std::cout << "==========" << std::endl << std::endl;
SCIP_CALL( SCIPprintStatistics(scip, NULL) );
return SCIP_OKAY;
}
/** starts user interactive mode */
static
SCIP_RETCODE interactive(
SCIP* scip /**< SCIP data structure */
)
{
SCIP_CALL( SCIPstartInteraction(scip) );
return SCIP_OKAY;
}
/** creates a SCIP instance with default plugins, evaluates command line parameters, runs SCIP appropriately,
* and frees the SCIP instance
*/
static
SCIP_RETCODE runSCIP(
int argc, /**< number of shell parameters */
char** argv /**< array with shell parameters */
)
{
SCIP* scip = NULL;
/*********
* Setup *
*********/
/* initialize SCIP */
SCIP_CALL( SCIPcreate(&scip) );
/***********************
* Version information *
***********************/
SCIPprintVersion(scip, NULL);
std::cout << std::endl;
/* include default SCIP plugins */
SCIP_CALL( SCIPincludeDefaultPlugins(scip) );
/**************
* Parameters *
**************/
if( argc >= 3 )
{
SCIP_CALL( readParams(scip, argv[2]) );
}
else
{
SCIP_CALL( readParams(scip, NULL) );
}
/*CHECK_OKAY( SCIPwriteParams(scip, "scipmip.set", TRUE) );*/
/**************
* Start SCIP *
**************/
if( argc >= 2 )
{
SCIP_CALL( fromCommandLine(scip, argv[1]) );
}
else
{
printf("\n");
SCIP_CALL( interactive(scip) );
}
/********************
* Deinitialization *
********************/
SCIP_CALL( SCIPfree(&scip) );
BMScheckEmptyMemory();
return SCIP_OKAY;
}
/** main method starting SCIP */
int main(
int argc, /**< number of arguments from the shell */
char** argv /**< array of shell arguments */
)
{
SCIP_RETCODE retcode;
argc = 3;
argv [2]= "InputFile";
retcode = runSCIP(argc, argv);
if( retcode != SCIP_OKAY )
{
SCIPprintError(retcode);
return -1;
}
return 0;
}
【问题讨论】: