In the Linux machine I don't have access to root so, when I installed GLPK,
I configured it as:
./configure --disable-shared --prefix=/home/jwalteros/GLPK/GLPK-4.54-ins/

The makefile I used to compile the files I sent before (in the Linux
machine) is bellow. The only difference is that GLPKLIBPATH points to a
different folder besides /usr/local

I have not done anything else, besides this. I know it works because the
main application I am working on works as well. I also managed to make it
work using Visual Studio on a windows computer that someone borrowed me.

do you think it is something else?

Thanks in advance

--------------------------------------------------
CPP             = g++
CPPARGS         = -m64 -g
GLPKPATH = /home/jwalteros/GLPK/glpk-4.54
GLPKLIBPATH = /home/jwalteros/GLPK/GLPK-4.54-ins
INCGLPK         = $(GLPKLIBPATH)/include/
INCGLPKSRC      = $(GLPKPATH)/src/
INCGLPKCGLIB    = $(GLPKPATH)/src/cglib/
INCGLPKENV      = $(GLPKPATH)/src/env/
INCGLPKMISC     = $(GLPKPATH)/src/misc/
CPPLIBGLPK      = -L$(GLPKLIBPATH)/lib/

all: main1 main2

main1:
$(CPP) $(CPPARGS) -o main1 main1.cpp -I$(INCGLPK) -I$(INCGLPKSRC)
-I$(INCGLPKCGLIB) \
-I$(INCGLPKENV) -I$(INCGLPKENV) -I$(INCGLPKMISC) $(CPPLIBGLPK) -lglpk

main2:
$(CPP) $(CPPARGS) -o main2 main2.cpp -I$(INCGLPK) -I$(INCGLPKSRC)
-I$(INCGLPKCGLIB) \
-I$(INCGLPKENV) -I$(INCGLPKENV) -I$(INCGLPKMISC) $(CPPLIBGLPK) -lglpk

clean:
rm -rf *o main1 main2



On Wed, Jun 18, 2014 at 1:55 PM, Heinrich Schuchardt <[email protected]>
wrote:

> 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

Reply via email to