rlguy/GridFluidSim3D

Compilation error

mbah360 opened this issue · 1 comments

Hi
Can you please give any hints on resolving the issue below while running make.
I'm using Fedora 22 64 bit, l have nvidia cuda installed, as well as the intel OpenCLSDK installed.
Had this same issue/stuck error on Ubuntu.

Thanks
Stephen

g++ -O3 -std=c++11 -Wall -c -o src/fluidsimulationsavestate.o src/fluidsimulationsavestate.cpp
g++ -O3 -std=c++11 -Wall -c -o src/fluidsource.o src/fluidsource.cpp
g++ -O3 -std=c++11 -Wall -c -o src/gridindexkeymap.o src/gridindexkeymap.cpp
g++ -O3 -std=c++11 -Wall -c -o src/gridindexvector.o src/gridindexvector.cpp
g++ -O3 -std=c++11 -Wall -c -o src/implicitpointprimitive.o src/implicitpointprimitive.cpp
g++ -O3 -std=c++11 -Wall -c -o src/implicitsurfacescalarfield.o src/implicitsurfacescalarfield.cpp
g++ -O3 -std=c++11 -Wall -c -o src/interpolation.o src/interpolation.cpp
g++ -O3 -std=c++11 -Wall -c -o src/isotropicparticlemesher.o src/isotropicparticlemesher.cpp
In file included from src/isotropicparticlemesher.h:28:0,
from src/isotropicparticlemesher.cpp:20:
src/fragmentedvector.h: In instantiation of ‘bool FragmentedVector::_isLastNode(int) [with T = vmath::vec3]’:
src/fragmentedvector.h:104:19: required from ‘void FragmentedVector::push_back(T) [with T = vmath::vec3]’
src/isotropicparticlemesher.cpp:217:56: required from here
src/fragmentedvector.h:305:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
return i == _nodes.size() - 1;
^
g++ -O3 -std=c++11 -Wall -c -o src/levelset.o src/levelset.cpp
g++ -O3 -std=c++11 -Wall -c -o src/logfile.o src/logfile.cpp
g++ -O3 -std=c++11 -Wall -c -o src/macvelocityfield.o src/macvelocityfield.cpp
g++ -O3 -std=c++11 -Wall -c -o src/main.o src/main.cpp
g++ -O3 -std=c++11 -Wall -c -o src/particleadvector.o src/particleadvector.cpp
g++ -O3 -std=c++11 -Wall -c -o src/polygonizer3d.o src/polygonizer3d.cpp
g++ -O3 -std=c++11 -Wall -c -o src/pressuresolver.o src/pressuresolver.cpp
g++ -O3 -std=c++11 -Wall -c -o src/spatialpointgrid.o src/spatialpointgrid.cpp
g++ -O3 -std=c++11 -Wall -c -o src/sphericalfluidsource.o src/sphericalfluidsource.cpp
g++ -O3 -std=c++11 -Wall -c -o src/stopwatch.o src/stopwatch.cpp
g++ -O3 -std=c++11 -Wall -c -o src/trianglemesh.o src/trianglemesh.cpp
g++ -O3 -std=c++11 -Wall -c -o src/turbulencefield.o src/turbulencefield.cpp
g++ -O3 -std=c++11 -Wall -c -o src/vmath.o src/vmath.cpp
g++ src/aabb.o src/anisotropicparticlemesher.o src/clscalarfield.o src/collision.o src/cuboidfluidsource.o src/diffuseparticlesimulation.o src/fluidbrickgrid.o src/fluidbrickgridsavestate.o src/fluidmaterialgrid.o src/fluidsimulation.o src/fluidsimulationsavestate.o src/fluidsource.o src/gridindexkeymap.o src/gridindexvector.o src/implicitpointprimitive.o src/implicitsurfacescalarfield.o src/interpolation.o src/isotropicparticlemesher.o src/levelset.o src/logfile.o src/macvelocityfield.o src/main.o src/particleadvector.o src/polygonizer3d.o src/pressuresolver.o src/spatialpointgrid.o src/sphericalfluidsource.o src/stopwatch.o src/trianglemesh.o src/turbulencefield.o src/vmath.o -lOpenCL -o fluidsim
/usr/bin/ld: cannot find -lOpenCL
collect2: error: ld returned 1 exit status
Makefile:59: recipe for target 'fluidsim' failed
make: *** [fluidsim] Error 1
[steve@localhost GFSM]$

my path below

[steve@localhost GFSM]$ $PATH
bash: /etc/OpenCL:/usr/lib64:/usr/local/cuda-7.5/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/steve/.local/bin:/home/steve/bin: No such file or directory
[steve@localhost GFSM]$

rlguy commented

Hello mbah360,

From the output, it looks like the OpenCL headers were found and the program was able to compile, but the OpenCL library was not found and that is why the linker failed with "/usr/bin/ld: cannot find -lOpenCL".

This could be because the OpenCL library is not in your search path. What directory is your OpenCL library in, and what is the filename? I believe the OpenCL library should have a filename like libOpenCL.so or libOpenCL.a.

In the case that the OpenCL library is not on the search path, you may edit the OPENCLLIBPATH variable in the Makefile to point to the directory that contains your OpenCL library file.

#Example:
OPENCLLIBPATH=-L"/path_to_library/"

The -L flag will add the path_to_library directory to the library search path.

I hope this solves the issue for you.

Best Regards,
Ryan