SdFat and SD libraries for teensy 3.1 in non-arduino build environment (Code::Blocks)

Status
Not open for further replies.

christoph

Well-known member
I was trying to compile Paul's CC3000 demo with SPI transactions, as posted in this thread/post inside Code::Blocks, and (I didn't expect any different) it didn't work. I got tons of errors, mainly related to the way arduino's build system works.

The SD library redefines many symbols already defined by the SdFat library, and the linker correctly complains about that. Examples are SdFile, SdVolume, and so on. How does the arduino build system get around that? I tried wrapping the SD objects in their own namespace, and that seemed to help compiling. But if they are wrapped in their own namespace, those from the SdFat library cannot be accessed outside of SD. SD is a wrapper for SdFat, so I assume that I need both.

[Removed SPCR related question which is now in a separate thread]

For anyone who might be able/would like to help, I can zip up my current project and upload it here.

Edit: When I remove the SdFat library from my project, I get less errors, but I can't really get the bigger picture. Here are the remaining errors:
Code:
In file included from libraries/SdFat/SdFile.h:24:0,
from libraries/SdFat/SdFat.h:38,
from libraries/SD/utility/SdFile.cpp:20:
libraries/SdFat/SdBaseFile.h:43:0: note: this is the location of the previous definition
#define pgm_read_word(addr) (*(const uint16_t*)(addr))
^
libraries/SD/utility/SdFile.cpp:25:57: error: 'void (* SdFile::dateTime_)(uint16_t*, uint16_t*)' is not a static member of 'class SdFile'
void (*SdFile::dateTime_)(uint16_t* date, uint16_t* time) = NULL;
^
libraries/SD/utility/SdFile.cpp:33:28: error: no 'uint8_t SdFile::addCluster()' member function declared in class 'SdFile'
uint8_t SdFile::addCluster() {
^
libraries/SD/utility/SdFile.cpp:46:35: error: no 'uint8_t SdFile::addDirCluster()' member function declared in class 'SdFile'
uint8_t SdFile::addDirCluster(void) {
^
libraries/SD/utility/SdFile.cpp:61:44: error: no 'dir_t* SdFile::cacheDirEntry(uint8_t)' member function declared in class 'SdFile'
dir_t* SdFile::cacheDirEntry(uint8_t action) {
^
libraries/SD/utility/SdFile.cpp:74:27: error: no 'uint8_t SdFile::close()' member function declared in class 'SdFile'
uint8_t SdFile::close(void) {
^
libraries/SD/utility/SdFile.cpp:91:71: error: no 'uint8_t SdFile::contiguousRange(uint32_t*, uint32_t*)' member function declared in class 'SdFile'
uint8_t SdFile::contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock) {
^
libraries/SD/utility/SdFile.cpp:130:44: error: no 'uint8_t SdFile::createContiguous(SdFile*, const char*, uint32_t)' member function declared in class 'SdFile'
const char* fileName, uint32_t size) {
^
libraries/SD/utility/SdFile.cpp:158:36: error: no 'uint8_t SdFile::dirEntry(dir_t*)' member function declared in class 'SdFile'
uint8_t SdFile::dirEntry(dir_t* dir) {
^
libraries/SD/utility/SdFile.cpp:178:50: error: no 'void SdFile::dirName(const dir_t&, char*)' member function declared in class 'SdFile'
void SdFile::dirName(const dir_t& dir, char* name) {
^
libraries/SD/utility/SdFile.cpp:201:46: error: no 'void SdFile::ls(uint8_t, uint8_t)' member function declared in class 'SdFile'
void SdFile::ls(uint8_t flags, uint8_t indent) {
^
libraries/SD/utility/SdFile.cpp:245:58: error: no 'uint8_t SdFile::make83Name(const char*, uint8_t*)' member function declared in class 'SdFile'
uint8_t SdFile::make83Name(const char* str, uint8_t* name) {
^
libraries/SD/utility/SdFile.cpp:284:57: error: no 'uint8_t SdFile::makeDir(SdFile*, const char*)' member function declared in class 'SdFile'
uint8_t SdFile::makeDir(SdFile* dir, const char* dirName) {
^
libraries/SD/utility/SdFile.cpp:384:74: error: no 'uint8_t SdFile::open(SdFile*, const char*, uint8_t)' member function declared in class 'SdFile'
uint8_t SdFile::open(SdFile* dirFile, const char* fileName, uint8_t oflag) {
^
libraries/SD/utility/SdFile.cpp:476:68: error: no 'uint8_t SdFile::open(SdFile*, uint16_t, uint8_t)' member function declared in class 'SdFile'
uint8_t SdFile::open(SdFile* dirFile, uint16_t index, uint8_t oflag) {
^
libraries/SD/utility/SdFile.cpp:502:64: error: no 'uint8_t SdFile::openCachedEntry(uint8_t, uint8_t)' member function declared in class 'SdFile'
uint8_t SdFile::openCachedEntry(uint8_t dirIndex, uint8_t oflag) {
^
libraries/SD/utility/SdFile.cpp:550:39: error: no 'uint8_t SdFile::openRoot(SdVolume*)' member function declared in class 'SdFile'
uint8_t SdFile::openRoot(SdVolume* vol) {
^
libraries/SD/utility/SdFile.cpp:585:58: error: no 'void SdFile::printDirName(const dir_t&, uint8_t)' member function declared in class 'SdFile'
void SdFile::printDirName(const dir_t& dir, uint8_t width) {
^
libraries/SD/utility/SdFile.cpp:612:43: error: no 'void SdFile::printFatDate(uint16_t)' member function declared in class 'SdFile'
void SdFile::printFatDate(uint16_t fatDate) {
^
libraries/SD/utility/SdFile.cpp:626:43: error: no 'void SdFile::printFatTime(uint16_t)' member function declared in class 'SdFile'
void SdFile::printFatTime(uint16_t fatTime) {
^
libraries/SD/utility/SdFile.cpp:638:38: error: no 'void SdFile::printTwoDigits(uint8_t)' member function declared in class 'SdFile'
void SdFile::printTwoDigits(uint8_t v) {
^
libraries/SD/utility/SdFile.cpp:660:47: error: no 'int16_t SdFile::read(void*, uint16_t)' member function declared in class 'SdFile'
int16_t SdFile::read(void* buf, uint16_t nbyte) {
^
libraries/SD/utility/SdFile.cpp:724:34: error: no 'int8_t SdFile::readDir(dir_t*)' member function declared in class 'SdFile'
int8_t SdFile::readDir(dir_t* dir) {
^
libraries/SD/utility/SdFile.cpp:743:33: error: no 'dir_t* SdFile::readDirCache()' member function declared in class 'SdFile'
dir_t* SdFile::readDirCache(void) {
^
libraries/SD/utility/SdFile.cpp:774:28: error: no 'uint8_t SdFile::remove()' member function declared in class 'SdFile'
uint8_t SdFile::remove(void) {
^
libraries/SD/utility/SdFile.cpp:810:61: error: no 'uint8_t SdFile::remove(SdFile*, const char*)' member function declared in class 'SdFile'
uint8_t SdFile::remove(SdFile* dirFile, const char* fileName) {
^
libraries/SD/utility/SdFile.cpp:831:27: error: no 'uint8_t SdFile::rmDir()' member function declared in class 'SdFile'
uint8_t SdFile::rmDir(void) {
^
libraries/SD/utility/SdFile.cpp:869:30: error: no 'uint8_t SdFile::rmRfStar()' member function declared in class 'SdFile'
uint8_t SdFile::rmRfStar(void) {
^
libraries/SD/utility/SdFile.cpp:916:37: error: no 'uint8_t SdFile::seekSet(uint32_t)' member function declared in class 'SdFile'
uint8_t SdFile::seekSet(uint32_t pos) {
^
libraries/SD/utility/SdFile.cpp:957:26: error: no 'uint8_t SdFile::sync()' member function declared in class 'SdFile'
uint8_t SdFile::sync(void) {
^
libraries/SD/utility/SdFile.cpp:1018:67: error: no 'uint8_t SdFile::timestamp(uint8_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)' member function declared in class 'SdFile'
uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) {
^
libraries/SD/utility/SdFile.cpp:1065:41: error: no 'uint8_t SdFile::truncate(uint32_t)' member function declared in class 'SdFile'
uint8_t SdFile::truncate(uint32_t length) {
^
libraries/SD/utility/SdFile.cpp:1124:8: error: prototype for 'size_t SdFile::write(const void*, uint16_t)' does not match any in class 'SdFile'
size_t SdFile::write(const void* buf, uint16_t nbyte) {
^
In file included from libraries/SdFat/SdFat.h:38:0,
from libraries/SD/utility/SdFile.cpp:20:
libraries/SdFat/SdFile.h:45:7: error: candidates are: int SdFile::write(const void*, size_t)
int write(const void* buf, size_t nbyte);
^
libraries/SdFat/SdFile.h:44:7: error: int SdFile::write(const char*)
int write(const char* str);
^
libraries/SdFat/SdFile.h:43:10: error: virtual size_t SdFile::write(uint8_t)
size_t write(uint8_t b);
^
libraries/SD/utility/SdFile.cpp:1232:8: error: prototype for 'size_t SdFile::write(const char*)' does not match any in class 'SdFile'
size_t SdFile::write(const char* str) {
^
In file included from libraries/SdFat/SdFat.h:38:0,
from libraries/SD/utility/SdFile.cpp:20:
libraries/SdFat/SdFile.h:45:7: error: candidates are: int SdFile::write(const void*, size_t)
int write(const void* buf, size_t nbyte);
^
libraries/SdFat/SdFile.h:44:7: error: int SdFile::write(const char*)
int write(const char* str);
^
libraries/SD/utility/SdFile.cpp:1223:8: error: virtual size_t SdFile::write(uint8_t)
size_t SdFile::write(uint8_t b) {
^
All these errors state that a function defined for SdFile in SD/utility/SdFile.cpp was not declared in SD/utility/SdFile.h. So I might need SdFat/SdFile.h, but I don't know how to correctly include that in my compiler search path.

Regards

Christoph
 
Last edited:
I like using Visual Micro + Atmel Visual Studio..but they're windows only. And free.
It uses the same build strategy as Arduino. So you don't have to restructure/recode anything, nor mess with Makefiles.
 
SD/utility/SdFile.cpp includes <SdFat.h> in line 20. Which SdFat.h is meant here? SD/utility/SdFat.h or SdFat/SdFat.h?

Do I need the original SdFat library at all?
 
Status
Not open for further replies.
Back
Top