Cross-Platform Development in C++ - Syd Logan

Cross-Platform Development in C++

Building Mac OS X, Linux, and Windows Applications

(Autor)

Buch | Softcover
576 Seiten
2007
Addison-Wesley Educational Publishers Inc (Verlag)
978-0-321-24642-4 (ISBN)
67,30 inkl. MwSt
  • Keine Verlagsinformationen verfügbar
  • Artikel merken
Cross-Platform Development in C++ is the definitive guide to developing portable C/C++ application code that will run natively on Windows, Macintosh, and Linux/Unix platforms without compromising functionality, usability, or quality.

 

Long-time Mozilla and Netscape developer Syd Logan systematically addresses all the technical and management challenges associated with software portability from planning and design through coding, testing, and deployment. Drawing on his extensive experience with cross-platform development, Logan thoroughly covers issues ranging from the use of native APIs to the latest strategies for portable GUI development. Along the way, he demonstrates how to achieve feature parity while avoiding the problems inherent to traditional cross-platform development approaches.

 

This book will be an indispensable resource for every software professional and technical manager who is building new cross-platform software, porting existing C/C++ software, or planning software that may someday require cross-platform support.

 

Build Cross-Platform Applications without Compromise

 

Throughout the book, Logan illuminates his techniques with realistic scenarios and extensive, downloadable code examples, including a complete cross-platform GUI toolkit based on Mozilla’s XUL that you can download, modify, and learn from. Coverage includes 



Policies and procedures used by Netscape, enabling them to ship Web browsers to millions of users on Windows, Mac OS, and Linux
Delivering functionality and interfaces that are consistent on all platforms
Understanding key similarities and differences among leading platform-specific GUI APIs, including Win32/.NET, Cocoa, and Gtk+
Determining when and when not to use native IDEs and how to limit their impact on portability
Leveraging standards-based APIs, including POSIX and STL
Avoiding hidden portability pitfalls associated with floating point, char types, data serialization, and types in C++
Utilizing platform abstraction libraries such as the Netscape Portable Runtime (NSPR)
Establishing an effective cross-platform bug reporting and tracking system
Creating builds for multiple platforms and detecting build failures across platforms when they occur
Understanding the native runtime environment and its impact on installation
Utilizing wxWidgets to create multi-platform GUI applications from a single code base
Thoroughly testing application portability
Understanding cross-platform GUI toolkit design with Trixul

Syd Logan is a software developer living and working in Southern California. A graduate of San Diego State University with B.S. and M.S. degrees in computer science, Syd was a member of the Netscape Client Product Development (CPD) team, where he held both engineering and management positions during the development of Netscape 6 and 7. After Netscape, Syd remained at AOL where he implemented VoIP and peer-to-peer video features as a member of the AOL Instant Messenger team. Syd’s previous publications include Developing Imaging Applications with XIELib and Gtk+ Programming in C (Prentice Hall, 1997 and 2001). His technical interests include machine learning, operating systems design, algorithms, and just about anything that has to do with C, C++, and Unix.

Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1

Areas That Can Affect Software Portability . . . . . . . . . . . . . . . . . . . 3

The Role of Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1 Policy and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Item 1: Make All of Your Platforms a Priority . . . . . . . . . . . . . . . . . 17

Item 2: Code from a Common Codebase . . . . . . . . . . . . . . . . . . . . 22

Platform Factory Implementations . . . . . . . . . . . . . . . . . . . . . . . 29

Implementation Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Platform-Specific ProcessesImpl Classes . . . . . . . . . . . . . . . . . . . 32

Creating the Instance Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . 42

Organizing the Project in CVS or SVN . . . . . . . . . . . . . . . . . . . 45

Makefiles and Building the Code . . . . . . . . . . . . . . . . . . . . . . . . . 49

Item 3: Require Developers to Compile Their Code

with Different Compilers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Item 4: Require Developers to Build Their Code on

Multiple Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Item 5: Test Builds on Each Supported Platform . . . . . . . . . . . . . . . 60

Item 6: Pay Attention to Compiler Warnings . . . . . . . . . . . . . . . . . . 61

GNU Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Microsoft Visual C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

2 Build System/Toolchain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Item 7: Use Whatever Compiler Makes the Most Sense

for a Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Item 8: Use Native IDEs When Appropriate . . . . . . . . . . . . . . . . . . 67

Item 9: Install and Use Cygwin on Windows . . . . . . . . . . . . . . . . . . 71

Item 10: Use a Cross-Platform Make System . . . . . . . . . . . . . . . . . . 76

Make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Building on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Autoconf/Automake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Imake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Installing on Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Installing on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Using Imake, an Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Imakefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Building a Complete Program from Multiple Sources . . . . . . . . . 95

Overriding Defaults with site.def . . . . . . . . . . . . . . . . . . . . . . . . 99

Eliminating #ifdefs in Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

Files Used by Imake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Building Projects with Subdirectories . . . . . . . . . . . . . . . . . . . . 108

Building Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

3 Software Configuration Management . . . . . . . . . . . . . . . . . . 131

Item 11: Use a Cross-Platform Bug Reporting and

Tracking System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Ability to Track Platform-Specific Bugs . . . . . . . . . . . . . . . . . . 133

Bugzilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Item 12: Set Up a Tinderbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Item 13: Use CVS or Subversion to Manage Source Code . . . . . . . 147

Setting Up and Using CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Item 14: Use Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Patch Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Dealing with Rejects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Patch and Cross-Platform Development . . . . . . . . . . . . . . . . . . 163

4 Installation and Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Item 15: Provide Support for Native Installers . . . . . . . . . . . . . . . 165

XPInstall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Platform Installs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

5 Operating System Interfaces and Libraries . . . . . . . . . . . . . . . 221

Item 16: Use Standards-Based APIs (For Example, POSIX) . . . . . . 222

POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Support for POSIX, SVID, XPG, and BSD . . . . . . . . . . . . . . . 226

Using Standards Support in GCC . . . . . . . . . . . . . . . . . . . . . . . 227

Microsoft Runtime Library Support for POSIX . . . . . . . . . . . . 231

Using GCC on Microsoft Windows . . . . . . . . . . . . . . . . . . . . . 234

Deciding Which Standards to Support . . . . . . . . . . . . . . . . . . . 240

Item 17: Consider Using a Platform Abstraction Library

Such as NSPR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Why NSPR? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

NSPR Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Additional NSPR Functionality . . . . . . . . . . . . . . . . . . . . . . . . 260

6 Miscellaneous Portability Topics . . . . . . . . . . . . . . . . . . . . . . . 273

Item 18: Take Care When Using Floating Point . . . . . . . . . . . . . . . 274

Don’t Serialize Floating-Point Values as Binary . . . . . . . . . . . . 276

Equality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Item 19: Be Explicit Regarding the Sign of Char Types . . . . . . . . . 278

Item 20: Avoid the Serialization of Binary Data . . . . . . . . . . . . . . 280

Item 21: Avoid Problems Related to the Size and

Organization of Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Size of Integer Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

NSPR and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Sizes and Efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

Integer Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

Struct Alignment and Ordering . . . . . . . . . . . . . . . . . . . . . . . . . 299

7 User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Item 22: Separate the User Interface from the Model . . . . . . . . . . 304

Separating the User Interface and Application Logic

with Model/View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Using Publish/Subscribe to Communicate between

the View and the Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

Item 23: Develop a Cross-Platform User Interface Strategy . . . . . . 323

Issues Affecting Portable Cross-Platform GUI

Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Choosing a GUI Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

8 wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

Installing wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

A Simple Example: Hello wxWidgets . . . . . . . . . . . . . . . . . . . . 335

Creating the Application User Interface . . . . . . . . . . . . . . . . . . 337

Building wxWidgets Applications . . . . . . . . . . . . . . . . . . . . . . . 345

Controls and Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Container Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

Composite Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Internationalization and Localization . . . . . . . . . . . . . . . . . . . . 410

9 Developing a Cross-Platform GUI Toolkit in C++ . . . . . . . . . . . 427

What is XUL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

DHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

Scripting Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

The Document Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . 434

Style Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437

XUL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

Windows and Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

Toolbars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

Other Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

Programming with XUL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

Adding Logic to the UI with JavaScript . . . . . . . . . . . . . . . . . . 443

Interfacing JavaScript and C/C++ Code with XPCOM

and XPConnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444

Trixul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Widget Support in Trixul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

Basic Operation of Trixul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448

Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

Implementation Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

Creating Widget Implementation Objects . . . . . . . . . . . . . . . . . 459

Widget Factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

Application Main Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

Steps Taken by Trixul to Create a User Interface . . . . . . . . . . . . 471

Documents, Elements, and the DOM . . . . . . . . . . . . . . . . . . . . 472

Widget Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

Scrolled Windows and Layout . . . . . . . . . . . . . . . . . . . . . . . . . 484

Integration with JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

Integrating with C++ Components . . . . . . . . . . . . . . . . . . . . . . 496

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

Erscheint lt. Verlag 6.12.2007
Verlagsort New Jersey
Sprache englisch
Maße 183 x 229 mm
Gewicht 810 g
Themenwelt Informatik Programmiersprachen / -werkzeuge C / C++
ISBN-10 0-321-24642-X / 032124642X
ISBN-13 978-0-321-24642-4 / 9780321246424
Zustand Neuware
Haben Sie eine Frage zum Produkt?
Mehr entdecken
aus dem Bereich
Das umfassende Handbuch

von Torsten T. Will

Buch | Hardcover (2024)
Rheinwerk (Verlag)
49,90
Technisch-wissenschaftliche Übungsaufgaben mit Lösungen

von Thomas Hoch; Gerd Küveler

Buch | Softcover (2023)
Springer Vieweg (Verlag)
37,99
das umfassende Handbuch

von Jürgen Wolf; René Krooß

Buch | Hardcover (2023)
Rheinwerk (Verlag)
49,90