Hello Jose,
when I ran
nm -g /usr/local/lib/libglpk.so | grep graph
on Linux it showed that cfg_build_graph is not an exported symbol.
cfg_build_graph is not a function described in doc/glpk.pdf, and is not
meant to be used by an external program.
>>>> The code compiles perfectly in a Linux machine.
Your example does not compile on my Linux system:
~/temp$ g++ -m64 -g main1.cpp -o main1
-I/home/user/src/glpk-4.54/src/cglib
-I/home/user/src/glpk-4.54/src/misc/ -I/home/user/src/glpk-4.54/src/env/
-I/home/user/src/glpk-4.54/src/ -lglpk
/tmp/cceieEVB.o: In function `main':
/home/user/temp/main1.cpp:17: undefined reference to `_glp_cfg_build_graph'
collect2: error: ld returned 1 exit status
So I wonder how you made you program compile on your Linux machine. Did
you manipulate the list of exported symbols?
Best regards
Heinrich
On 18.06.2014 07:26, Jose Walteros wrote:
Dear Heinrich,
Thank you for your early response. I just checked the paths and the version and
it is 4.54, which is the one I am actually using.
The same goes for the path to /src/cglib, It points to the 4.54.
Is there anything else that might be happening?
Thanks
On Jun 17, 2014, at 11:50 PM, "Heinrich Schuchardt" <[email protected]> wrote:
Hello Jose,
The errors you report look like you are linking to an old version of GLPK which
does not contain the library function you want to use,
You could check the output of glp_version.
You can influence the library loadpath on OS X by exporting DYLD_LIBRARY_PATH.
Best regards
Heinrich Schuchardt
http://www.xypron.de
Jose L Walteros <[email protected]> schrieb:
Hi all,
I tried to send this before and I think it didn't work. I am sorry if you
receive it again.
I have been working on a code for a while that uses the conflict graph
libraries of GLPK. The code compiles perfectly in a Linux machine. However,
when I try to compile it on a MacOS X (via the console) I get some linking
errors.
To give you an idea of my problem, I attached bellow a makefile and two trivial
applications: main1.cpp is an application that reads clique4.lp, generates the
conflict graph, and prints the number of vertices of such graph. As I
mentioned, the code compiles perfectly in Linux using the same makefile (after
updating the corresponding paths). In MacOS X, I get the following error:
-----------------------------------------
Undefined symbols for architecture x86_64:
"__glp_cfg_build_graph", referenced from:
_main in main1-5183c5.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [main1] Error 1
-----------------------------------------
To make sure there was no issues with the installation of GLPK or the path to
the libraries, I created main2.cpp, which is an applications that simply reads
and solves clique4.lp. Contrary to the previous case, main2.cpp compiles and
runs perfectly.
I have tried many things, but I haven't been able to make it work. I hope you
guys can help.
Regards,
Attachments:
-----------------------------------------
main1.cpp
-----------------------------------------
#include <iostream>
extern "C" {
#include <glpk.h>
#include "cfg.h"
#include "env.h"
#include "prob.h"
}
int main(int argc, const char * argv[])
{
glp_prob *P;
CFG *G;
int nV, v, u, degree;
P = glp_create_prob();
glp_read_lp(P, NULL, "./clique4.lp");
G = cfg_build_graph(P);
nV = G->nv;
std::cout<<"# vertices: "<<nV<<std::endl;
int *ref = G->ref;
int *neg = G->neg;
int *pos = G->pos;
for (v = 1; v <= nV; v++){
std::cout<<"vertex "<<v<<" --> variable "<<ref[v]<<"\n";
std::cout<<" pos "<<pos[ref[v]]<<" neg "<<neg[ref[v]]<<"\n";
}
return 0;
}
-----------------------------------------
main2.cpp
-----------------------------------------
#include <iostream>
extern "C" {
#include <glpk.h>
}
int main(int argc, const char * argv[])
{
glp_prob *P;
P = glp_create_prob();
glp_read_lp(P, NULL, "./clique4.lp");
glp_simplex(P, NULL);
return 0;
}
-----------------------------------------
Makefile
-----------------------------------------
CPP = g++
ARGS = -m64 -g
GLPKPATH = /Users/jwalteros/Applications/GLPK/glpk-4.54
GLPKLIBPATH = /usr/local
GLPK = $(GLPKLIBPATH)/include/
GLPKSRC = $(GLPKPATH)/src/
GLPKCGLIB = $(GLPKPATH)/src/cglib/
GLPKENV = $(GLPKPATH)/src/env/
GLPKMISC = $(GLPKPATH)/src/misc/
LIBGLPK = $(GLPKLIBPATH)/lib/
all: main1 main2
main1:
$(CPP) $(ARGS) -o main1 main1.cpp -I$(GLPK) -I$(GLPKSRC) -I$(GLPKCGLIB)
\
-I$(GLPKENV) -I$(GLPKENV) -I$(GLPKMISC) -L$(LIBGLPK) -lglpk
main2:
$(CPP) $(ARGS) -o main2 main2.cpp -I$(GLPK) -L$(LIBGLPK) -lglpk
-----------------------------------------
_______________________________________________ Help-glpk mailing list
[email protected] https://lists.gnu.org/mailman/listinfo/help-glpk
_______________________________________________
Help-glpk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-glpk